JavaScript连续调用reduce出现异常输出的原因咨询
问题原因:reduce回调参数使用错误
首先明确:func1的逻辑是没问题的,它通过reduce把原数组元素逐个push到新数组,最终返回的就是[1,2,3,4,5],问题出在后续调用的reduce上。
Array.reduce的参数逻辑
JS数组的reduce方法,回调函数需要接收至少两个核心参数:
- 第一个参数:累加器(accumulator),即上一次回调返回的值;如果没指定初始值,第一次调用时它就是数组的第一个元素。
- 第二个参数:当前元素(currentValue),即数组中正在处理的元素。
你写的回调(x) => { console.log(x); return x; }只接收了第一个参数(累加器),完全没处理当前元素:
- 第一次调用:累加器
x是数组第一个元素1,打印1后返回1; - 后续每次调用:累加器始终是上一次返回的
1,所以每次打印的都是1; - 因为数组有5个元素,不指定初始值时
reduce会执行5-1=4次,最终输出4个1。
修正方案
如果想依次打印数组的每个元素,需要在回调里接收第二个参数(当前元素):
func1(arr).reduce((acc, curr) => { console.log(curr); // 打印当前元素 return acc; // 累加器返回值不影响打印逻辑,随便返回即可 })
此时输出为:
2 3 4 5
如果想从1开始打印,给reduce指定一个初始值就行:
func1(arr).reduce((acc, curr) => { console.log(curr); return acc; }, null) // 初始值可以是任意值,比如null、0都可以
这时会完整输出5个元素:
1 2 3 4 5
内容的提问来源于stack exchange,提问作者Hwan E
相关产品推荐
相关产品推荐

