Учитывая многомерный массив:многомерных массив накопленной суммы в Javascript
var a = [[3,2,5], [4,1,7], [1,6,8]];
Я хотел бы сделать накопленную сумму каждого массива, чтобы вернуться к следующему результату:
[[3,2,5], [7,3,12], [8,9,20]];
- суммарная сумма по 1-му элементам каждой подматрицы: 3 4 1
- сумма диплом по 2-му элементам каждой подматрицы: 2 1 6
- суммарная сумма на 3-х элементах каждой подматрицы: 5 7 8
Я попытался использовать reduce(), но не могу получить ожидаемый результат.
Любые предложения, очень ценные.
S
ОБНОВЛЕНИЕ - Принимая его на следующий уровень:
var a = [
[new Date(), 3,2,5],
[new Date(), null,1,7],
[new Date(), null,6,8],
[new Date(), 1,2,3]
];
Если в результате:
[[new Date(), 3,2,5],
[new Date(), null,3,12],
[new Date(), null,9,20],
[new Date(), 4,11,23]]
Мой подход заключается в создании многомерного offsetIndex массива :
var offsetIdx = [];
for (var i=1; i<a.length; i++) {
for (var z=0; z<a[i].length; z++) {
var zValue = a[i][z];
oIdx = offsetIdx[z] || 0;
a[i][z] = zValue && z!==0 ? a[i-1-oIdx][z] + zValue : zValue;
if(!zValue){
offsetIdx[z] = oIdx + 1;
} else {
offsetIdx[z] = 0;
}
}
}
Рад видеть другие подходы и способы сделать его сверхлегким.
Как это, что ваш выходной массив может иметь такое же количество элементов, при условии, что сумма будет применяться к вход? –
@NewAlexandria: он накапливает результат, когда он идет в каждый массив, поэтому первый массив не изменяется, второй - это сумма самого первого плюса (для каждого члена соответственно), третья - сумма результата второго, снова плюс его собственные соответствующие члены и т. д. –
Правильно. Я наклонился к функции reduce(), когда он передает ссылку на предыдущий элемент. Я видел примеры с плоскими 1 тусклыми массивами, но не могу его адаптировать, чтобы разместить многомерный массив. – Seb