javascript - 从购物车中获取总数的最佳方法是什么?
问题描述
我目前的购物车是这样存储的:
[ { 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
解决方案
您的尝试很接近,但不起作用,因为您的price
andamount
值是字符串(也就是说,它们被括在引号中)。现在,如果您已将total
变量实例化为0
,那么代码将意识到您想要price
并amount
添加为 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.price
and前面item.amount
加上了一个一元运算+
符,因此字符串值 ( ) 在组合它们之前"699"
会被转换为整数 ( )。699
推荐阅读
- xml - 如果子节点包含此文本,则提取属性值
- html - 如何在移动视图中的表格中的单元格元素之间具有相等的间距?
- javascript - 如何从javascript中的选择选项中获取多个值?
- powershell - 批处理文件中的循环迭代缓慢
- php - 在 PHP 中使用 DOMXPath 调用 XML 数据
- jquery - 如何以 Unix 时间戳格式控制台记录 jQuery UI 的 datepicker 日期?
- intersection-observer - 如何去抖动或限制 Intersection Observer?
- javascript - 无法为预出价槽复制 JS 变量
- c++ - C++ std::stoul 不抛出异常
- python - Django - 按表单更新用户实例