如何用JavaScript遍历交易行并计算每笔交易总额?
解决JavaScript遍历交易行并求和的问题
首先看你当前代码的问题:循环里写的input.transaction是错误的,因为input是数组,你需要用input[i]获取数组里的每一个交易对象,所以打印交易ID应该改成console.log(input[i].transaction)。
接下来要计算每笔交易的总额,需要嵌套遍历:先遍历外层的交易数组,再遍历每个交易里的transactionLines数组,累加lineValue。下面给你几种实现方式:
方法一:嵌套for循环(适合新手理解)
这种方式逻辑直观,一步步遍历:
const inputData= "[{\r\n\t\t\"transaction\": 1,\r\n\t\t\"store\": 1,\r\n\t\t\"transactionLines\": [{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 3,\r\n\t\t\t\t\"lineValue\": 25\r\n\t\t\t},\r\n\r\n\t\t\t{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 2,\r\n\t\t\t\t\"lineValue\": 50\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 1,\r\n\t\t\t\t\"lineValue\": 100\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\t\"transaction\": 2,\r\n\t\t\"store\": 2,\r\n\t\t\"transactionLines\": [{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 2,\r\n\t\t\t\t\"lineValue\": 50\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 1,\r\n\t\t\t\t\"lineValue\": 100\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n]" const input = JSON.parse(inputData); // 遍历每个交易 for (let i = 0; i < input.length; i++) { const currentTransaction = input[i]; let total = 0; // 遍历当前交易的所有交易行 for (let j = 0; j < currentTransaction.transactionLines.length; j++) { total += currentTransaction.transactionLines[j].lineValue; } console.log(`交易${currentTransaction.transaction}的总额:${total}`); }
方法二:用forEach + reduce(更简洁的函数式写法)
forEach用来遍历外层交易,reduce可以快速累加数组数值,适合求和场景:
const input = JSON.parse(inputData); input.forEach(transaction => { // 用reduce计算交易行的总和 const total = transaction.transactionLines.reduce((sum, line) => { return sum + line.lineValue; }, 0); // 0是累加的初始值 console.log(`交易${transaction.transaction}的总额:${total}`); });
方法三:生成包含总额的新数组(保留原数据)
如果需要把计算后的总额和原交易信息结合,可以用map生成新数组:
const input = JSON.parse(inputData); const transactionsWithTotal = input.map(transaction => { const total = transaction.transactionLines.reduce((sum, line) => sum + line.lineValue, 0); // 返回包含原信息和总额的新对象 return { ...transaction, totalAmount: total }; }); console.log(transactionsWithTotal); // 输出结果会包含每个交易的totalAmount字段,比如第一个交易的totalAmount是175,第二个是150
学习建议
- 先掌握数组的基本访问方式:数组按索引访问(如
array[0]),array.length获取数组长度。 - 熟悉JavaScript数组常用方法:
forEach(遍历)、map(生成新数组)、reduce(累加/聚合),这些方法能让你处理数组更高效。 - 理解对象属性访问:比如
transaction.transaction是访问交易对象的transaction属性,transaction.transactionLines是访问它的交易行数组属性。
内容的提问来源于stack exchange,提问作者Sparx
相关产品推荐
相关产品推荐

