JavaScript 当我们传递一个带有一个参数的函数时,reduce 方法表现异常

JavaScript reduce method behaving strangely when we pass a function with one argument

JavaScript 菜鸟在这里。我不知道 map1 是如何计算的,我一次更改了 array1 的每个元素,而 map1 仍然打印为 -8。有没有人对 reduce() 方法有任何 link 的详细解释?我找到了none!或者谁能​​解释一下发生了什么?

const array1 = [1, 4, 9, 16];
const map1 = array1.reduce(x => x - 2, 0);
console.log(map1); // shows -8

没什么奇怪的。查看 docs.

你在这里传递的是初始值为 0 的 previousValue(或 accumulator)。每次迭代你只是忽略数组和 return previousValue - 2 中的元素。这里有 4 次迭代,所以 returned 值为 -8。

简单来说,reduce 接受多个值。第一个是以前的值(在本例中为 0),第二个是可比较的值(新值),然后是索引和数组。

const map1 = array1.reduce((prevValue, newValue) => newValue - 2, 0);

在此处阅读更多内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

在Javascript中,reduce接受

  • 回调函数作为第一个参数。
  • 作为第二个参数累加器初始值
array1.reduce(() => {}, initialValue);

这个回调主要有两个参数

  • 第一个参数 = 累加器
  • 第二个参数 = 当前值

累加器就像一个盒子,可以从上一次迭代中获取 returned 的任何值。 我们可以使用它从每次迭代中添加内容。

让我们看一个基本的例子:

const initialValue = 0
const answer = [1,2,3,4].reduce((acc, curr) => {

}, initialValue);
console.log('answer: ', answer);

这里我们有回调函数return什么都没有。

让我们看看这个例子的代码执行流程

对于第一次迭代,累加器设置为0, 因为我们没有return任何东西undefined 被returned设置为 ]acc = undefined 每次迭代。

当所有 4 次迭代完成后, 累加器被 returned。 (在这种情况下未定义)

例二:

const initialValue = 0
const answer = [1,2,3,4].reduce((acc, curr) => {
    return acc - 2; 
}, initialValue);
console.log('answer: ', answer);

第一次迭代中,acc = 0 由于初始值但在本次迭代结束时,return值为 0-2 = -2acc设置为-2。

第二次迭代acc-2变为-2-2 = -4。

第三次迭代,acc-2变为-4-2 = -6.

第四次迭代acc-2变为-6-2 = -8。 (最后一次迭代,所以 `acc 被 returned 并且我们得到 -8 作为最终结果)

由于我们使用的是箭头函数你可以删除括号'{''}'和'return'关键字单行 as

const initialValue = 0
const answer = [1,2,3,4].reduce((acc, curr) => acc - 2 , initialValue);
console.log('answer: ', answer);

最后两段代码完全一样只是语法糖.

不同

希望对您有所帮助,有任何问题请提问。