javascript - 如何在 JavaScript 中计算 Plaid API 交易数组的值之和?

标签 javascript plaid

对这个可能愚蠢的问题表示歉意 - 我对编码/JavaScript 相当陌生。

我正在使用Plaid's沙箱环境,用于在沙箱环境中提取事务数据。现在,我将以下内容定义为 transactionData:

    let transactionsData = [];
transactions.forEach(function(account) {
  account.transactions.forEach(function(transaction) {
    transactionsData.push({
      account: account.accountName,
      date: transaction.date,
      category: transaction.category[0],
      name: transaction.name,
      amount: transaction.amount
    });
  });
});

我可以成功地在 material table 中逐行呈现各个交易。像这样:

    const transactionsColumns = [
  { title: "Account", field: "account" },
  { title: "Date", field: "date", type: "date", defaultSort: "desc" },
  { title: "Name", field: "name" },
  { title: "Amount", field: "amount", type: "numeric" },
  { title: "Category", field: "category" }
];

          <MaterialTable
            columns={transactionsColumns}
            data={transactionsData}
            }}

我知道这必须非常简单,但我想做的就是对 transactionsData 求和并在页面上的其他位置呈现该单个求和值。如果我写 transactionsData.length 我可以很容易地收到交易计数。我尝试过以下有些类似的语法,但没有发现它有效:

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

任何帮助将不胜感激。

最佳答案

这是总计,使用 Array.prototype.reduce :

const transformed = [{"account":"Navy Federal Credit Union","date":"2020-01-01","category":"Travel","name":"United Airlines","amount":500},{"account":"Navy Federal Credit Union","date":"2019-12-30","category":"Travel","name":"Uber 072515 SF**POOL**","amount":6.33},{"account":"Navy Federal Credit Union","date":"2019-12-27","category":"Food and Drink","name":"Tectra Inc","amount":500}]

const unrounded = transformed.reduce(
  (acc, { amount }) => acc + amount,
  0
);

const roundCents = amount => Math.round(amount * 100) / 100;

const total = roundCents(unrounded);

console.log(total);

上面的更简单的版本,没有解构:

const transformed = [{"account":"Navy Federal Credit Union","date":"2020-01-01","category":"Travel","name":"United Airlines","amount":500},{"account":"Navy Federal Credit Union","date":"2019-12-30","category":"Travel","name":"Uber 072515 SF**POOL**","amount":6.33},{"account":"Navy Federal Credit Union","date":"2019-12-27","category":"Food and Drink","name":"Tectra Inc","amount":500}]

const unrounded = transformed.reduce(
  (acc, transaction) => acc + transaction.amount,
  0
);

const roundCents = amount => Math.round(amount * 100) / 100;

const total = roundCents(unrounded);

console.log(total);

以下是如何使用 Array.prototype.flatMap 转换 transactionsDataArray.prototype.map ,而不是 forEach:

const transactionsData = [{ accountName: 'a1', transactions: [{ date: '2020', category: ['c1'], name: 'n1', amount: 100 }, { date: '2020', category: ['c2'], name: 'n2', amount: 100 }]}, { accountName: 'a2', transactions: [{ date: '2020', category: ['c3'], name: 'n3', amount: 100 }, { date: '2020', category: ['c4'], name: 'n4', amount: 100 }]}]

const transformed = transactionsData.flatMap(({ accountName, transactions }) =>
  transactions.map(({ date, category, name, amount }) => ({
      account: accountName,
      date,
      category: category[0],
      name,
      amount
    })
  )
);

console.log(transformed)

再一次,一个更简单的版本,没有解构:

const transactionsData = [{ accountName: 'a1', transactions: [{ date: '2020', category: ['c1'], name: 'n1', amount: 100 }, { date: '2020', category: ['c2'], name: 'n2', amount: 100 }]}, { accountName: 'a2', transactions: [{ date: '2020', category: ['c3'], name: 'n3', amount: 100 }, { date: '2020', category: ['c4'], name: 'n4', amount: 100 }]}]

const transformed = transactionsData.flatMap(account =>
  account.transactions.map(transaction => ({
      account: account.accountName,
      date: transaction.date,
      category: transaction.category[0],
      name: transaction.name,
      amount: transaction.amount
    })
  )
);

console.log(transformed)

如果您想从现有数组创建新数组,则

Array.prototype.map 是正确的方法,而 Array.prototype.flatMap 是正确的方法如果您需要一个扁平数组,并且 map 会生成一个嵌套数组,则可以使用该方法。

关于javascript - 如何在 JavaScript 中计算 Plaid API 交易数组的值之和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59637096/

相关文章:

javascript - 格子连接到客户端时出现 Node 错误

javascript - 使用 AJAX 将数据存储在 MySQL 服务器数据库中

javascript - 生成等于 100 但两个数字之间的差必须大于 4 的 m 个数字

javascript - 选择列表子项中的复选框

javascript - 如何在不单击“取消”按钮的情况下关闭 Ionic2 Datetime 弹出窗口

javascript - 如何显示 react 选择的工具提示?

javascript - Android 版格子链接

access_token、_item 和 _user 的格子生命周期

plaid - 将 Plaid Link 与连接和身份验证结合使用