使用JavaScript的reduce方法将数组奇数乘2报undefined错误如何解决
问题排查
- 错误1:
reduce的回调函数没有返回累计器acc
reduce的工作逻辑是每次迭代拿到上一次返回的累计值作为本次的acc参数,你的回调全程没有return语句,第一次迭代结束后acc就会变成undefined,后续操作直接报错。 - 错误2:操作对象错误,你把元素push到了原数组
arr而不是累计器acc里
你初始传入的空数组是给acc的初始值,所有新元素都应该往acc里添加,操作原数组不仅达不到生成新数组的效果,还会意外修改原数组的内容。
修正后的代码
const multiplyOddByTwo = (arr) => { return arr.reduce((acc, curr) => { if (curr % 2 === 0) { acc.push(curr); } else { acc.push(curr * 2) } // 每次迭代必须返回累计器给下一轮迭代使用 return acc }, []) } console.log(multiplyOddByTwo([1, 2, 3])); // 输出结果:[2, 2, 6]
内容的提问来源于stack exchange,提问作者user14674901
相关产品推荐
相关产品推荐

