如何获取累积和阵列使用Underscore.js?

问题描述 投票:4回答:3

我有一个array = [1,2,3,4,5]并想利用underscore.js以获得累积求和阵列。

我想结果是:

[1,3,6,10,15]

我想数组而不是作为一个值的累积和15。任何帮助,将不胜感激。

underscore.js
3个回答
8
投票

你可以做一个_.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, []);
}

3
投票

_.map()也是一种选择:

_.map(array,function(num,i){ if(i > 0) array[i] += array[i-1]; });

jsFiddle DEMO

请注意,这个编辑原始数组,而不是技术上有什么_.map是应该做的

如果你想创建一个新的数组非破坏性的版本:

var array = [1,2,3,4,5];
var cumulative = 0;
var sums = _.map(array,function(num){ 
    cumulative += num;
    return cumulative;
});

jsFiddle DEMO


0
投票

使用_.reduce()

return _.reduce(
    array
    , (acc, _) => { 
        acc.push(_ + acc.slice(-1)[0])    // adding previous to current
        return acc
    }
    , [0]                                 // init acc with 0
).slice(1)                                // loose 0
© www.soinside.com 2019 - 2024. All rights reserved.