2016-09-30 4 views
4

Я работаю над очень большим массивом подмассивов, полный чисел, которые я хочу свести в одну сумму для каждого подмассива.Поиск суммы подмассивов

Пример:

var arr = [[1,2,3], [4,5,6]]; 
 

 
arr.forEach(function(item) { 
 
    item.reduce(function(a, b) { 
 
    return a + b; 
 
    }); 
 
}); 
 
console.log(arr); 
 

 
//I want arr to equal [[6], [15]];

Мое решение просто возвращает исходный элемент массива

+0

' arr.map (a => a.reduce ((p, c) => p + c)) ' – Redu

ответ

4

попробовать что-то вроде этого:

var arr = [[1,2,3], [4,5,6]]; 
var newArr = []; 

arr.forEach(function(item) { 
    item = item.reduce(function(a, b) { 
    return a + b; 
    }); 
    newArr.push([item]); 
}); 
console.log(newArr); 

Чтобы быть немного более кратким, вы можете использовать значения, переданные в t он Foreach обратного вызова: деталь вы в настоящее время переборе, индекс этого элемента, а сам массив:

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

Только то, что я искал. Благодаря! –

+0

Не проблема! Не забудьте оставить галочки на ответах, которые вы принимаете;) – opticon

2

.reduce не изменяет исходный массив. Вы можете использовать .map и вернуть новое значение, например:

var arr = [[1,2,3], [4,5,6]]; 
 

 
var newArr = arr.map(function(item) { 
 
    return [item.reduce(function(a, b) { 
 
    return a + b; 
 
    })]; 
 
}); 
 
console.log(newArr);

+0

безупречное спасибо! –

0

Или с картой и стрелками функции:

var arr = [[1,2,3], [4,5,6]]; 
var result = arr.map(item => item.reduce((a, b) => a + b)); 
console.log(result); // [ 6, 15 ] 
0

ES5 Синтаксис

var arr = [[1,2,3], [4,5,6]]; 

arr.map(function (item) { 
    return item.reduce(function (a, b) { 
    return a+b; 
    }); 
}) 

enter image description here

ES6 Синтаксис

arr.map(item => { 
    return item.reduce((a,b) => a+b); 
}) 

enter image description here

0

Может быть, это то, что вы хотите?

var arr = [[1,2,3], [4,5,6]]; 
 

 
arr = arr.map(function(item,i) { 
 
    return [item.reduce(function(a, b) { 
 
    return a + b; 
 
    })]; 
 
}); 
 
console.log(arr);

0

Если вы хотите суммированный результат, чтобы быть в их собственном списке, я бы разорвать эту проблему вниз в 2 этапа:

const arr = [[1,2,3], [4,5,6]]; 
 
const sumList = (xs) => [xs.reduce((x, y) => x + y, 0)]; 
 

 
alert(arr.map(sumList)); //=> [[6], [15]]