[英]How to count the sum of values in an array of objects in JavaScript?
这是一项如此简单的任务,但不知何故我被卡住了。 我有一系列产品项目的对象,如下所示:
[{id: 1, price: 30, quantity: 2}, {id: 2, price: 20, quantity: 4}, {id: 3, price: 10, quantity: 2}]
我需要计算所有物品的总价,应该是:特定产品的价格乘以数量,与以前的产品相同。 示例:(30*2)+(20*4)+(10*2)
我的代码如下所示:
items.forEach(function (item) {
let sum = item.price * item.quantity;
console.log(sum);
});
输出看起来像:
60
80
20
但是我需要计算应该是 160 的总数并将其呈现到页面上,但不知何故我无法弄清楚如何做到这一点
Array.prototype.reduce()
方法最适合这样的操作(总和)。
在我下面的回答中, sum
是累加器,最初设置为0
。 累加器是先前由回调返回的值。 { price, quantity }
是当前值的对象析构。
const sumTotal = arr => arr.reduce((sum, { price, quantity }) => sum + price * quantity, 0) const data = [ { id: 1, price: 30, quantity: 2 }, { id: 2, price: 20, quantity: 4 }, { id: 3, price: 10, quantity: 2 }, ] const total = sumTotal(data) console.log(total) // 160
下面是一个类似的例子。
你快要得到答案了。 我稍微修改了您的代码并获得了预期的结果。 见下文。
const items = [{id: 1, price: 30, quantity: 2}, {id: 2, price: 20, quantity: 4}, {id: 3, price: 10, quantity: 2}]; const sumItems = () => { let sum = 0; items.forEach(function(item) { let calculation = item.price * item.quantity; sum += calculation; }) console.log(sum); }; sumItems();
let items = [ {id: 1, price: 30, quantity: 2}, {id: 2, price: 20, quantity: 4}, {id: 3, price: 10, quantity: 2} ] let total = items.reduce((sum,item) => sum + item.price * item.quantity, 0); console.log(total);
var products =[{id: 1, price: 30, quantity: 2}, {id: 2, price: 20, quantity: 4}, {id: 3, price: 10, quantity: 2}] console.log(products.map(x=> x.price*x.quantity).reduce((a, b) => a + b, 0))
如果您可以使用外部库,我建议使用lodash
库中的sumBy
方法
例子:
_.sumBy(items, function(item) { return item.price * item.quantity; });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.