JavaScript - reduce() 函数的例子

JavaScript - examples of reduce() function

我正在查看这个使用 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() 的例子吗 - 我不确定我是否完全理解它是如何工作的。

谢谢

您可以为 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

reduce 所做的是采用 initialValue、具有 2 个基本参数(可以采用更多)的 functionlist 值。如果没有提供 initialValue 则假定它是列表的第一个元素。该函数应该对通常用作累加器的 previousValuenextValue.

做一些事情

因此,假设您有一个值列表:[1, 2, 3, 4, 5] 并且该函数应该添加 2 个参数和 0.

initialValue

第一步:

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(这是第二个参数),因此就好像从第二步开始一样。

reduce() 通过遍历数组并调用缩减器函数(此函数是传递给 reduce() 的第一个参数)来工作。此函数有四个参数:

  • previousValue,有点像 'running total'。这最初是未定义的,除非您提供种子值作为 reduce().
  • 的第二个参数
  • currentValue 这是数组中的一个对象
  • index 数组中的当前值
  • array,数组本身

当你的 reductor 函数被调用时,它的 return 值成为新的 previousValue 参数,下次 reductor 函数被调用。这就是魔法。在调用 reductor 函数并给出数组中的最后一个对象后,它的 return 值将是 reduce().

的 return 值

老实说,您将看到的许多示例(例如使用 reduce() 来求和一堆整数)使用 for() 循环非常容易。它的真正价值在于你在做 functional programming.

您还可以使用 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 循环没有什么不能做的,但它看起来更干净。