使用reduce方法对javascript循环中的所有值求和无效
我有一个shopping cart.html页面,其中用户选择的项目显示在表中。我想显示表中每一行所有总计的总计。我的代码如下:使用reduce方法对javascript循环中的所有值求和无效,javascript,jquery,Javascript,Jquery,我有一个shopping cart.html页面,其中用户选择的项目显示在表中。我想显示表中每一行所有总计的总计。我的代码如下: function showCart() { if (cart.length == 0) { $("#cart").css("visibility", "hidden"); return; } $("#cart").css("visibility", "visible");
function showCart() {
if (cart.length == 0) {
$("#cart").css("visibility", "hidden");
return;
}
$("#cart").css("visibility", "visible");
$("#cartBody").empty();
for (var i in cart) {
var item = cart[i];
var total = item.Qty * item.Price + item.Chrg;
var row = "<tr><td>" + item.Product + "</td><td>" +
item.Price + "</td><td>" + item.Qty + "</td><td>"
+ item.Chrg + "</td><td>"
+ total + "</td><td>"
+ "<button onclick='deleteItem(" + i + ")'>Delete</button></td></tr>";
$("#cartBody").append(row);
}
}
现在我想在表格底部显示总计,如下所示:
+---------+------+-----+------------+-------+
| Product |Price | Qty | Del.Charge | Total |
+---------+------+-----+------------+-------+
| Chips | 20 | 5 | 10 | 110 |
| Coke | 50 | 3 | 10 | 160 |
| Corn | 10 | 2 | 10 | 30 |
+---------+------+-----+------------+-------+
Grand Total: 200
到目前为止我试过这个
var gtotal = new Array; //placed above for loop
gtotal = total + ',';
console.log(gtotal); //shows 110,160,30,
var gtotal = [gtotal].reduce((a, b) => a + b, 0);
$("#gtotal").append(gtotal); //append result on div id gtotal on cart.html page
显示-0110016030,//前缀为0
gtotal = total + ',';
console.log(gtotal); //shows 110,160,30,
var gtotal = [gtotal].reduce((a, b) => a + b, 0);
$("#gtotal").append(gtotal); //append result on div id gtotal on cart.html page
显示-0110016030,//前缀为0
这是因为你在用0作为累加器的约化函数中做a+b。因为您使用[gtotal]作为输入数组,所以只有一个缩减步骤:使用1100160030,。然后a+b完成。使用0作为累加器,将0添加到字符串只会导致该行为,因为这里的+运算符是一个串联操作
我使用了.split',将数字元素数组中的逗号分隔字符串转换为字符串so gtotal.split',给出[110、160、30、]。然后我使用.map将这些字符串值转换为数字类型。最后,.reduce可以用来得到你的总价值
var gtotal='110160,30';
console.loggtotal//显示110160,30,
var totalValue=gtotal.split','.maps=>Numbers.reducea,b=>a+b,0;
console.logtotalValue;G总计=总计+',';[G总计]。减少。。。不管怎样,你都要用一个值,一个字符串来迭代数组…@CertainPerformance你能告诉我应该是什么样的吗?你不应该只映射到一个数字。而是使用reducea,b=>a+Numberb,0@bambam当然,你也可以这样做。我的习惯是,如果reduce返回一个数字,请确保输入数组是一个数字。这在可读性和可维护性方面给了您一个优势,例如想使用自定义函数或执行一些所需的附加操作?然后调整地图功能这不是意见的问题,而是性能的问题。两个循环与一个循环。这对大型企业的绩效影响巨大arrays@CertainPerformance你可能错过了后期脚本。这种情况经常发生。
var gtotal = new Array; //placed above for loop
gtotal = total + ',';
console.log(gtotal); //shows 110,160,30,
var gtotal = [gtotal].reduce((a, b) => a + b, 0);
$("#gtotal").append(gtotal); //append result on div id gtotal on cart.html page
gtotal = total + ',';
console.log(gtotal); //shows 110,160,30,
var gtotal = [gtotal].reduce((a, b) => a + b, 0);
$("#gtotal").append(gtotal); //append result on div id gtotal on cart.html page