项目场景:
购物车的总数量和总金额
在商城购物车中,需要经过选择商品操作后,统计选中的商品的总数量和总金额
问题描述
计算金额和计算总数的方法一致时出现问题
选中商品时,正常的金额统计没问题,但是统计商品总数前几个显示为0,选中最后一个商品时才生效,computed内代码:
totalPrice() {
let amount = this.list.reduce(function(total, item) {
if (item.checked) {
let price = item.sku ? item.sku.price : item.goods.price;
return total + parseInt(item.cart_nums) * parseFloat(price);
} else {
return total;
}
}, 0);
return amount.toFixed(2);
},
checkNum() {
let cnum = this.list.reduce(function(total, item) {
if (item.checked) {
let nums = item.nums;
return total + nums;
} else {
return 0;
}
}, 0);
return cnum;
},
原因分析:
可能是选中判断时的处理有差异:
计算金额是,所有的价格数字都是固定的,但是计算总数量时,只有选择最后一个才会生效,应该是循环中的判断else {return 0;}返回0导致数据丢失。
解决方案:
去除计算总数量的if判断,添加三目运算:
totalPrice() {
let amount = this.list.reduce(function(total, item) {
if (item.checked) {
let price = item.sku ? item.sku.price : item.goods.price;
return total + parseInt(item.cart_nums) * parseFloat(price);
} else {
return total;
}
}, 0);
return amount.toFixed(2);
},
checkNum() {
let cnum = this.list.reduce(function(total, item) {
let nums = item.checked ? item.nums : 0;
return total + nums
}, 0);
return cnum;
},。