2016-03-30 2 views
4

У нас есть массивы:Получить сумму столбцов массива в JavaScript

[1, 2, 3, 0] 
[1, 2, 3] 
[1, 2] 

нужно, чтобы получить один массив, индексы, который будет как сумма столбцов. Ожидаемый результат:

[3, 6, 6, 0] 
+0

Иногда вам повезет, и люди даже не вопрос о том, что вы не показали никаких усилий вообще. Вам повезло;) – axelduch

ответ

9

Вы можете использовать Array.prototype.reduce() в сочетании с Array.prototype.forEach().

var array = [ 
 
     [1, 2, 3, 0], 
 
     [1, 2, 3], 
 
     [1, 2] 
 
    ], 
 
    result = array.reduce(function (r, a) { 
 
     a.forEach(function (b, i) { 
 
      r[i] = (r[i] || 0) + b; 
 
     }); 
 
     return r; 
 
    }, []); 
 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

+0

Как это происходит? – Rayon

+0

выполняет итерацию по внешнему массиву, а затем добавляет каждое значение внутреннего массива в ту же позицию в массиве результатов. –

+1

@NinaScholz уменьшить, мой любимый! – axelduch

1

Вы можете сделать что-то вроде этого, используя map() и reduce()

// function to get sum of two array where array length of a is greater than b 
 
function sum(a, b) { 
 
    return a.map((v, i) => v + (b[i] || 0)) 
 
} 
 

 
var res = [ 
 
    [1, 2, 3, 0], 
 
    [1, 2, 3], 
 
    [1, 2] 
 
    // iterate over array to reduce summed array 
 
].reduce((a, b) => a.length > b.length ? sum(a, b) : sum(b, a)) 
 

 

 
document.write('<pre>' + JSON.stringify(res, null, 3) + '</pre>');

1

Базовый цикл,

var arr = [[1, 2, 3, 0],[1, 2, 3],[1, 2]]; 
var res = []; 

for(var i=0;i<arr.length;i++){ 
for(var j=0;j<arr[i].length;j++){ 
    res[j] = (res[j] || 0) + arr[i][j]; 
} 
} 

console.log(res); //[3, 6, 6, 0] 
0
function arrayColumnsSum(array) { 
    return array.reduce((a, b)=> // replaces two elements in array by sum of them 
    a.map((x, i)=>    // for every `a` element returns... 
     x +      // its value and... 
     (b[i] || 0)    // corresponding element of `b`, 
           // if exists; otherwise 0 
    ) 
) 
} 

console.log(arrayColumnsSum([ 
    [1, 2, 3, 0] 
,[1, 2, 3] 
,[1, 2] 
])) 
Смежные вопросы