5

underscore.jsを使用して累積合計配列array = [1,2,3,4,5]を取得したいと思います。

私が欲しい結果は次のとおりです。

[1,3,6,10,15]

累積合計15ではなく配列を値として使用します。どんな助けでもいただければ幸いです。

4

4 に答える 4

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, []);
}
于 2012-08-09T19:57:38.750 に答える
4

_.map()オプションでもあります:

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

jsFiddleデモ

これは元の配列を編集するものであり、技術的に_.mapは想定されていることではないことに注意してください

新しいアレイを作成する非破壊バージョンが必要な場合:

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

jsFiddleデモ

于 2012-08-09T20:09:31.747 に答える
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
于 2019-02-05T10:17:40.263 に答える
-1

[1、2、3、4、5] .map((c、i、a)=> c +(a [i-1] || 0));

于 2020-04-06T12:11:58.457 に答える