JavaScript - reduce()函数的示例

时间:2016-01-04 22:19:19

标签: javascript reduce

我正在看这个使用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()的其他例子 - 我不确定我是否完全遵循它的工作原理。

谢谢

4 个答案:

答案 0 :(得分:10)

减少的方法是initialValuefunction包含2个基本参数(可能需要更多)和list个值。如果没有提供initialValue,则认为它是列表的第一个元素。该函数应该与通常用作累加器的previousValuenextValue做一些事情。

因此,假设您有一个值列表:[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循环做的,但它看起来更干净。