首页 > 解决方案 > 从购物车中获取总数的最佳方法是什么?

问题描述

我目前的购物车是这样存储的:

[ { itemid: '572462', name: 'item1', amount: '1', price: '499' },
  { itemid: '572458', name: 'Item2', amount: '1', price: '699' } ]

遍历购物车并获得金额 * 价格的总价的最佳方法是什么?我完全想不通...

当前代码:

var total;
for (let i = 0; i < cart.length; i++) {
  total += cart[i].price * cart[i].amount;
}
console.log(total);

这个 console.log 总是给我一个 NaN

标签: javascriptjson

解决方案


您的尝试很接近,但不起作用,因为您的priceandamount值是字符串(也就是说,它们被括在引号中)。现在,如果您已将total变量实例化为0,那么代码将意识到您想要priceamount添加为 number,并按预期工作:

var cart = [ { itemid: '572462', name: 'item1', amount: '1', price: '499' },
  { itemid: '572458', name: 'Item2', amount: '1', price: '699' } ];

var total = 0;
for (let i = 0; i < cart.length; i++) {
  total += cart[i].price * cart[i].amount;
}
console.log(total);


就个人而言,我更喜欢用.reduce()它来做这种事情。

var items = [ { itemid: '572462', name: 'item1', amount: '1', price: '499' },
  { itemid: '572458', name: 'Item2', amount: '1', price: '699' } ]
  
var total = items.reduce((total, item) => total + (+item.price * +item.amount), 0);

console.log(total);

.reduce()通过循环遍历数组中的每个项目并修改“累加器”来工作。累加器是最终将返回的值。例如,如果您尝试对数组的项目求和,您会执行accummulator + currentItem. 最后,您的累加器将是所有数字的总和。

请注意,我在你的item.priceand前面item.amount加上了一个一元运算+符,因此字符串值 ( ) 在组合它们之前"699"会被转换为整数 ( )。699


推荐阅读