簡體   English   中英

將多維數組的特定值加在一起

[英]Add specific values of multidimensional array together Javascript

好的,所以我有一個多維數組,該數組本身包含9個數組。 這些嵌套數組中的每一個包含10個數字值。 為了簡單起見,我們假設一切都像這樣:

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多維數組:添加值

我使用的是“下划線”方法以及由Otto提供的jQuery $ .each部分。

有人可以在這里幫忙嗎?

像這樣

 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上

一個簡單的數組解決方案如下:

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

這是另一種解決方案:

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/

對多維數組中的列求和的另一種方法(基於Lodash 4 )。

 var arrays = [ [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] ]; function sum_col(arrays) { return _.map(_.unzip(arrays), _.sum); } console.log(sum_col(arrays)); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM