为什么.reduce()方法累加器对象中的数组调用.push()不生效?
问题原因
Array.reduce()的回调函数要求每轮执行结束后必须返回累加器对象,供下一轮迭代使用。你提供的代码中没有在回调内返回acc,导致第一轮迭代结束后累加器变为undefined,后续迭代访问undefined.even/undefined.odd会直接抛出异常,push操作自然无法生效。
修复方案
只需要在回调函数末尾添加返回累加器的逻辑即可:
let a = []; for (let i = 0; i <= 20; i++) { a.push(i); } let { even, odd } = a.reduce((acc, val) => { val % 2 === 0 ? acc.even.push(val) : acc.odd.push(val); return acc; // 新增返回累加器的逻辑 }, { even: [], odd: [] });
内容的提问来源于stack exchange,提问作者PAPPI-HS
相关产品推荐
相关产品推荐

