我有一个由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中对数组求和的正确方法是什么?
答案 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);