2013-04-18 43 views
0

好吧,所以我有一個本身包含9個數組的多維數組。每個嵌套數組都包含10個數值。爲了簡單起見,假設這一切看起來是這樣的:將多維數組的特定值添加到一起Javascript

var MyArray = [ 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10] 
] 

我想寫,將採取每個嵌套數組的第一個指數函數(在這種情況下,全1),並添加在一起,將這個值推送到數組或對象。然後,我需要繼續使用此函數,添加下一個索引的所有值,以及下一個等等等等。最後,我應該有一個10個值的數組(或者一個對象也可以在這裏工作)。該值將是:

1+1+1+1+1+1+1+1+1, 
2+2+2+2+2+2+2+2+2, 
3+3+3+3+3+3+3+3+3... 

...等等等等,從而使新數組的實際值將是這樣的:

[9, 18, 27, 36, 45, 54, 63, 72, 81] 

這裏美中不足的是,我需要這通過靈活/動態,以便它可以在MyArray只有6個數組的情況下工作,或者嵌套數組每個只有4個值。它應該可以處理任意數量的嵌套數組,每個嵌套數組都有自己的值(儘管每個嵌套數組將包含相同數量的值!)。

通過JavaScript和/或jQuery完成此操作的最佳方法是什麼?請注意,我也可以有輸出值的一個對象,以這種方式:

{1:9, 2:18, 3:27, 4:36, 5:45, 6:54, 7:63, 8:72, 9:81} 

我嘗試使用類似的代碼從另一個StackOverflow的線程來得到一個對象,但它返回

{1:NaN, 2:NaN, 3:NaN, etc.} 

該線程可以在這裏找到:

Javascript Multidimensional Array: Add Values

我使用的是「下劃線」的方法,並提供了它的jQuery的$。每個部分奧托。

任何人都可以在這裏幫忙?

回答

0

這裏是另一種解決方案:

var MyArray = [ 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10], 
[1,2,3,4,5,6,7,8,9,10] 
] 

var results= []; 

MyArray.map(function(a){ 
    for(var i=0;i<a.length;i++){ 
     if(results.length === a.length){ 
      results[i] = results[i] + a[i]; 
     }else{ 
      results.push(a[i]); 
     } 
    } 
}); 

http://jsfiddle.net/uMPAA/

+0

嘿肖恩遺憾的響應晚,地圖基本上是通過每個值循環的數組,所以a將是MyArray的每個值。 ..希望這是有道理的。 – dewitt

0

一個簡單的數組的解決辦法是以下幾點:

var results= []; 

for (var i=0;i<MyArray.length;i++) { 
    for(var j=0; j<MyArray[i].length; j++) { 
     if(results[j] == undefined) { results[j] = 0; } 
      results[j] = results[j]+data[i][j]; 

    } 
} 

注意if(results[j]==undefined)線 - 這可能是你沒有做什麼。如果你忽略了這一點,你會在所有行上得到NaN,因爲你將一個未定義的值添加到一個數字中。

1

像這樣的事情

var myData = [ 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
]; 

var summed = []; 

myData[0].forEach(function (arr, index) { 
    var sum = myData.reduce(function (a, b) { 
     return a + b[index]; 
    }, 0); 

    summed.push(sum); 
}); 

console.log(summed); 

jsfiddle