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 个基本参数(可以采用更多)的 function
和 list
值。如果没有提供 initialValue
则假定它是列表的第一个元素。该函数应该对通常用作累加器的 previousValue
和 nextValue
.
做一些事情
因此,假设您有一个值列表:[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 循环没有什么不能做的,但它看起来更干净。
我正在查看这个使用 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 个基本参数(可以采用更多)的 function
和 list
值。如果没有提供 initialValue
则假定它是列表的第一个元素。该函数应该对通常用作累加器的 previousValue
和 nextValue
.
因此,假设您有一个值列表:[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()
.
老实说,您将看到的许多示例(例如使用 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 循环没有什么不能做的,但它看起来更干净。