我正在看这个使用reduce()函数的例子。
function add(runningTotal, currentValue) {
return runningTotal + currentValue;
}
var nums = [1,2,3,4,5,6,7,8,9,10];
var sum = nums.reduce(add);
print(sum); // displays 55
你能否告诉我一些使用reduce()的其他例子 - 我不确定我是否完全遵循它的工作原理。
谢谢
答案 0 :(得分:10)
减少的方法是initialValue
,function
包含2个基本参数(可能需要更多)和list
个值。如果没有提供initialValue
,则认为它是列表的第一个元素。该函数应该与通常用作累加器的previousValue
和nextValue
做一些事情。
因此,假设您有一个值列表:[1, 2, 3, 4, 5]
,该函数应该添加2个参数和initialValue
0
。
第一步:
0 + 1 = 1
2
3
4
5
第二步:
1 + 2 = 3
3
4
5
第三步:
3 + 3 = 6
4
5
第四步:
6 + 4 = 10
5
第五步:
10 + 5 = 15 //Final value
如您所见,输入从list
变为单个值,因此名称为reduce
。在你的例子中,没有initialValue
(这是第二个参数),所以就像在第二步开始一样。
答案 1 :(得分:4)
您可以为reduce
设置第二个参数
function add(runningTotal, currentValue) {
return runningTotal + currentValue;
}
var someInitValue = 10
var nums = [1,2,3,4,5,6,7,8,9,10];
var sum = nums.reduce(add, someInitValue);
console.log(sum); // displays 65
答案 2 :(得分:4)
reduce()
通过遍历数组并调用reductor函数来工作(这个函数是传递给reduce()
的第一个参数。这个函数有四个参数:
previousValue
,这是一种“跑步总数”。这最初是未定义的,除非您提供种子值作为reduce()
的第二个参数。currentValue
这是您数组中的对象index
数组中当前值array
,数组本身调用reductor函数时,其返回值将成为下次调用reducer函数时的新previousValue
参数。那才是魔力。在调用reductor函数并给出数组中的最后一个对象之后,它的返回值将是reduce()
的返回值。
reduce()
来总结一堆整数)很容易用for()
循环。它的真正价值在于你正在做functional programming。
答案 3 :(得分:3)
您还可以使用reduce来执行生成某种流密码的操作。
var plaintext = "thisisaplaintext";
var chars = plaintext.split('');
var result = '';
function encrypt(runningTotal, currentValue){
var newVal = ((runningTotal + (""+runningTotal).charCodeAt()-32) % 94)+32
result = result + String.fromCharCode(newVal)
return newVal;
}
chars.reduce(encrypt, 15 /*any arbitrary starting value*/);
console.log(result);
基本上,任何可以通过独立计算的组合或任何需要总计滚动的东西来制作。没有什么是你不能用for循环做的,但它看起来更干净。