使用reduce方法对javascript循环中的所有值求和无效

使用reduce方法对javascript循环中的所有值求和无效,javascript,jquery,Javascript,Jquery,我有一个shopping cart.html页面,其中用户选择的项目显示在表中。我想显示表中每一行所有总计的总计。我的代码如下: function showCart() { if (cart.length == 0) { $("#cart").css("visibility", "hidden"); return; } $("#cart").css("visibility", "visible");

我有一个shopping cart.html页面,其中用户选择的项目显示在表中。我想显示表中每一行所有总计的总计。我的代码如下:

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