我希望每个单独的返回值来自reduce()函数而不是total

时间:2015-07-25 17:02:32

标签: javascript arrays reduce

      previousValue currentValue    index         array      return value
first call       0        1               1          [0, 1, 2, 3, 4]    1
second call      1        2               2          [0, 1, 2, 3, 4]    3
third call       3        3               3          [0, 1, 2, 3, 4]    6
fourth call      6        4               4          [0, 1, 2, 3, 4]    10

我希望数组中的1,3,6,10不是返回总数10.所以要返回每个调用

2 个答案:

答案 0 :(得分:1)

您可以将返回值推送到数组中,就像这样。它反对函数式编程,因为它将results变为副作用。但它确实满足了你的需求。

var array = [0, 1, 2, 3, 4];
var results = [];

array.reduce(function(previousValue, currentValue) {
    var newValue = previousValue + currentValue;
    results.push(newValue);
    return newValue;
});

// result is 1,3,6,10
alert(results);

答案 1 :(得分:0)

不要为此使用reduce。切片数组,移动一个值以开始小计,然后使用map。

var arr = [0, 1, 2, 3, 4], output = arr.slice(), subtotal = output.shift()
output = output.map(function(elem) { return subtotal += elem })
// output is [1, 3, 6, 10]

编辑 - 实际上,这可以与reduce一起使用,甚至比上面更简洁:

var arr = [0, 1, 2, 3, 4]
arr.reduce(function(a, b, ndx) { return a.length ? a.concat(a[ndx - 2] + b) : [a + b]})
// returns [1, 3, 6, 10]