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 = -2。 acc
设置为-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);
最后两段代码完全一样只是语法糖.
不同
希望对您有所帮助,有任何问题请提问。
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 = -2。 acc
设置为-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);
最后两段代码完全一样只是语法糖.
不同希望对您有所帮助,有任何问题请提问。