JavaScript中.map()函数的工作原理及累加和代码参数疑问
数组累加和函数的参数写法疑惑解答
首先你贴的这段代码存在语法错误,箭头函数的参数列表写法完全不对。nums.map((acc = 0, num => acc += num)) 里的括号中,第二个参数写成了 num => acc += num——这相当于把一个箭头函数作为map回调的第二个参数,既不符合map的回调参数规则,也根本实现不了累加和的效果。
先明确Array.prototype.map的回调参数顺序:
- 第一个参数:当前遍历到的元素(currentValue)
- 第二个参数:当前元素的索引(index)
- 第三个参数:原数组本身(array)
你误以为acc是currentValue、num是index,是把参数顺序和错误的写法混在了一起,但原代码的参数写法本身就不成立。
如果想用map实现数组的累加和(即每个位置的值是前面所有元素的和),需要借助一个外部的累加变量,比如:
const runningSum = function(nums) { let acc = 0; return nums.map(num => acc += num); };
不过更合适的是用reduce来实现,因为reduce本身就是为这类归并累加操作设计的,写法更规范:
const runningSum = function(nums) { return nums.reduce((result, num, index) => { const currentSum = index === 0 ? num : result[index - 1] + num; result.push(currentSum); return result; }, []); };
回到你贴的原代码,它试图给acc设置默认值0,但map的回调函数每次遍历都会重新调用,默认值只会在参数未传入时生效,而map每次都会传入当前元素,所以这个默认值根本不会被用到,反而错误的参数写法会导致代码直接报错。
内容的提问来源于stack exchange,提问作者Flowly
相关产品推荐
相关产品推荐

