2013-07-09 26 views
0

一個專欄中,我有陣列狀物體的像這樣的集合:和對象的集合中的JavaScript

a = [[1,2],[3,4],[5,6],[7,8]] 

而且我想sum the columns(如果u認爲這是一個4×2陣列)等即:

col1_sum = 16 
col2_sum = 20 

這樣做的最好方法是JS?

我嘗試使用underscore's _.reduce功能,像這樣:

var col1_sum =_.reduce(a, function(memo,obj){ return memo + parseFloat(obj[0]);},0) 

,但我得到一個 「未定義」 錯誤

什麼想法?謝謝。

回答

3

你可以隨時踢它的舊派。這並不漂亮,但它的工作原理。

col1_sum = 0; 
col2_sum = 0; 
for (var i = 0; i < a.length; ++i) { 
    col1_sum += a[i][0]; 
    col2_sum += a[i][1]; 
} 

我其他的想法是使用jQuery的each功能,但我想你是不是在找一個jQuery解決方案嗎?

編輯 - 誰需要jQuery.each?只要使用JavaScript的Array.forEach

var col1_sum = 0; 
var col2_sum = 0; 

a = [[1,2],[3,4],[5,6],[7,8]]; 
a.forEach(function(element, index, array) { col1_sum += element[0]; col2_sum += element[1]; }); 

alert(col1_sum); 
alert(col2_sum); 
+0

'誰需要jQuery.each?'可能有jQuery的人並且不想墊片Array.forEach支持IE <= 8。 –

+0

@FabrícioMatté我知道,我知道。我正在輕浮。我使用jQuery.each以至於忘記了Array.forEach。 –

+0

謝謝你,我會踢它老派 – user1452494

1

您也可以踢它新的學校:

var sumColumnJS = function sumColumnJS(array, col) { 
    var sum = 0; 
    array.forEach(function (value, index, array) { 
     sum += value[col]; 
    }); 
    return sum; 
}; 

或使用_.each數組迭代器:

sumColumn_ = function sumColumn_(array, col) { 
    var sum = 0; 
    _.each(a, function (item) { 
     sum += item[col]; 
    }); 
    return sum; 
}; 

工作演示:http://jsfiddle.net/HTqvf/

0

簡單的迭代,如

 
    var col1_sum = 0, col2_sum = 0, row; 
    for (row in a) 
    { 
     col1_sum += a[row][0]; 
     cos2_sum += a[row][1]; 
    } 
+0

儘管你可能不應該在數組中使用'for ... in'。參見例如http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea –

3

,我從你的下劃線一個簡單的jsfiddle減少代碼,似乎任何傳統語言是工作的罰款:http://jsfiddle.net/PdL5P/

var a = [[1,2],[3,4],[5,6],[7,8]] 

var col1_sum = _.reduce(a, function(memo,obj){ return memo + parseFloat(obj[0]); }, 0); 

$("#sum").html(col1_sum) 

你確定「A」是在你的代碼的那一點定義的?

-1

我會這樣做。

a = [[1,2],[3,4],[5,6],[7,8]] 
col1_sum = _.sum(_.map(a,0)) 
col2_sum = _.sum(_.map(a,1)) 
+0

用戶想要下劃線js的解決方案。 _.sum()不是underscore.js函數。 – NiviD