如何在 Java 脚本中计算 Plaid API 事务数组的值总和?
How can I calculate the sum of values of Plaid API transaction array in Java Script?
对于这个可能很愚蠢的问题表示歉意 - 我是 coding/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);
下面是如何将 transactionsData
转换为 Array.prototype.flatMap
and Array.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
会生成一个嵌套的。
对于这个可能很愚蠢的问题表示歉意 - 我是 coding/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);
下面是如何将 transactionsData
转换为 Array.prototype.flatMap
and Array.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
会生成一个嵌套的。