2013-04-18 4 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 $ .each его часть, представленную Отто.

Любой, кто может здесь помочь?

ответ

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

Hey Sean извините за поздний ответ, карта в основном перебирает каждое значение из массива, поэтому 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

Смежные вопросы