我想要 reduce() 函数中的每个 return 值而不是总值
I want each individual return value from the reduce() function rather than the total
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 而不是 return 总共 10 个。因此 return 每次调用
您可以将 return 值压入数组,如下所示。它与函数式编程背道而驰,因为它会改变 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);
不要为此使用 reduce。对数组进行切片,移动一个值以开始小计,然后使用映射。
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]
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 而不是 return 总共 10 个。因此 return 每次调用
您可以将 return 值压入数组,如下所示。它与函数式编程背道而驰,因为它会改变 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);
不要为此使用 reduce。对数组进行切片,移动一个值以开始小计,然后使用映射。
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]