2016-06-12 125 views
0

我需要从一个数组中的几个对象中总结一个关键“数字”的所有值。什么是正确的方法来做到这一点?这是我试过的。如何从javascript中的对象数组中获取键的值的总和?

var numarray = [{"number":"10"},{"number":"2"},{"number":"5"}, 
{"number":"3"},{"number":"21"},{"number":"43"},{"number":"30"}]; 

function Sum() { 
    var sum; 

    for (number in numarray[i]){ 
    alert(sum); //sum would be the result I need to get 
    } 
} 
+0

在问一个新问题之前,请使用搜索(['[javascript] sum properties'](http://stackoverflow.com/search?q=%5Bjavascript%5D+sum+properties))。有很多类似的问题可以帮助你。 –

回答

3

使用forEach循环浏览每个json对象。

使用​​将值转换为整数

var numarray = [ 
{"number":"10"}, 
{"number":"2"}, 
{"number":"5"}, 
{"number":"3"}, 
{"number":"21"}, 
{"number":"43"}, 
{"number":"30"}]; 

function Sum(){ 
var sum=0; 

numarray.forEach(function(item){ 
sum += parseInt(item.number) 
}) 
document.write('<pre>'+sum+'</pre>') 
} 
Sum() 

DEMO

编辑

当使用parseInt函数最好是指定基数

parseInt(item.number,10) 

使用10基数意味着数字解析用碱10,因此圈数成。如果parseInt整数检测前导零它将解析在八进制基

数量使用数量

Number(item.number) 

它不会检测到任何任意八进制

+0

在这种情况下,“item”会是什么?对象的价值? – Gonzalo

+0

指定'parseInt'的基数。 –

+0

为什么使用'parseInt'而不是'Number'? –

2

您可以使用reduce此:

下面是你通常会发现元素的总和在一个阵列:

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

既然你有对象的数组,你需要这种更改为类似:

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

通知的0我添加了添加作为参数?这是默认参数,在这种情况下是必需的。

相关问题