javascript数组的总和返回所有数字的字符串连接

时间:2017-02-02 18:35:48

标签: javascript arrays sum

我有一个由ajax提取的php json_encode对象。我想要做的是总结这个数组。这是我到目前为止所做的:

var json = $.parseJSON(data);
var tot = new Array();
for (var i = 0; i < json.length; ++i) {
   tot.push(json[i].final_total);
   $('table tbody').append("<tr><td>" + json[i].order_id + "</td><td>" + json[i].final_total + "</td></tr>");
}

现在我要总结这个数组。我试过这个:

var sum = tot.reduce(function(pv, cv) { return pv + cv; }, 0);
$("#total").html( sum );

但结果是:

09.748.529.129.129.119.59.79.89.79.89.79.79.79.79.79.79719.248.59.79 ......

我也尝试过:

myFunction(tot); 

function getSum(total, num) {
    return total + num;
}
function myFunction(item) {
    document.getElementById("total").innerHTML = item.reduce(getSum);
}

但我得到了相同的结果(数字彼此相邻)。

我也试过这个:

var tot = 0;
for (var i = 0; i < json.length; ++i) {
   tot += json[i].final_total);
   $('table tbody').append("<tr><td>" + json[i].order_id + "</td><td>" + json[i].final_total + "</td></tr>");
}
$("#total").html( tot );

但我上面得到的结果相同(数字彼此相邻)。

那么在javascript中对数组求和的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

数组元素为strings,为了正确添加它们,必须将它们转换为integer

var sum = tot.reduce(function(a, b) {
  return parseFloat(a) + parseFloat(b);
}, 0);

取自MDN

  

连接运算符(+)将两个字符串值连接在一起,返回另一个字符串,它是两个操作数字符串的并集。

这是由用于字符串连接和添加的+运算符引起的常见问题。问题最好用以下示例描述:

var result = '1' + 3 + 3 + 7 //result is '1337'

编辑:@Pointy - 很好听,谢谢! :)

答案 1 :(得分:3)

您必须使用parseInt(如果数字整数),parseFloat(如果浮点数)或{{1} (如果不确定)将它们明确地解释为数字,如:

Number

答案 2 :(得分:1)

你需要使用一个解析int,因为它连接sting而不是添加整数

var sum = tot.reduce(function(pv,cv){return parseInt(pv)+ parseInt(cv);},0);

parseInt