給定一個多維數組:的多維數組累積和在Javascript
var a = [[3,2,5], [4,1,7], [1,6,8]];
我願做每個陣列返回以下結果的累加值:
[[3,2,5], [7,3,12], [8,9,20]];
- 每個子陣列的第一個元素的總和:3 4 1
- 每個子陣列的第二個元素的總和:2 1 6
- 兼總和每個子陣列的第三個元素:5 7 8
我試過使用reduce(),但不能完全得到預期的結果。
任何建議,非常感謝。
小號
更新 - 把它帶到一個新的水平:
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