我有一個array = [1,2,3,4,5]
,並且想要使用underscore.js獲得數組的累積總和。如何使用Underscore.js獲取累積和數組?
我想要的結果是:
[1,3,6,10,15]
我想要的陣列不是作爲一個值的累積和15中。任何幫助,將不勝感激。
我有一個array = [1,2,3,4,5]
,並且想要使用underscore.js獲得數組的累積總和。如何使用Underscore.js獲取累積和數組?
我想要的結果是:
[1,3,6,10,15]
我想要的陣列不是作爲一個值的累積和15中。任何幫助,將不勝感激。
你可以做一個_.reduce()
得到這個:
_.reduce([1, 2, 3, 4, 5], function (acc, n) { acc.push((acc.length > 0 ? acc[acc.length-1] : 0) + n); return acc }, [])
更可讀的版本放在這裏:
var prefixSum = function (arr) {
var builder = function (acc, n) {
var lastNum = acc.length > 0 ? acc[acc.length-1] : 0;
acc.push(lastNum + n);
return acc;
};
return _.reduce(arr, builder, []);
}
_.map()
也是一種選擇:
_.map(array,function(num,i){ if(i > 0) array[i] += array[i-1]; });
注意,這個編輯原始數組,而不是技術上有什麼_.map
是應該做
如果你想創建一個新的數組非破壞性版本:
var array = [1,2,3,4,5];
var cumulative = 0;
var sums = _.map(array,function(num){
cumulative += num;
return cumulative;
});
好的解決方案,但出於好奇,這不會違反函數式編程的思想,因爲累積是函數的副作用嗎? – bob 2013-08-21 01:38:47
你測試過了嗎?對我而言,它返回[1,2,3,4,5],與我嘗試的嘗試類似。 – user664023 2012-08-09 20:00:46
@ user664023:是的,輕微的錯字。雖然現在修復了。 – 2012-08-09 20:01:05
明白了 - 謝謝。 – user664023 2012-08-09 20:06:21