JavaScript对象数组处理问题:合并pets数组结果异常求助
代码修复与错误说明
错误原因
- 你的
reduce回调逻辑a && b.pets完全不符合合并数组的需求:- 初始值
[]在JS中属于真值,第一次执行时,a && b.pets会直接返回第一个人的pets数组; - 第二次执行时,
a已经是第一个人的pets数组(依然是真值),所以直接返回第二个人的pets数组,最终仅保留最后一组数据。
- 初始值
修复后的代码
function petPower(people) { let rest = people.reduce((a, b) => a.concat(b.pets), []); return rest; } console.log(petPower([ { name: 'Brain', pets: ['Doggy', 'Minuuy'] }, { name: 'Carla', pets: ['Hammy', 'Hamishy'] }, ]));
修复逻辑
利用Array.concat()方法,每次将当前对象的pets数组合并到累加器a中,初始值为空数组,最终得到所有宠物的合并数组。你也可以用扩展运算符实现相同效果:[...a, ...b.pets]。
内容的提问来源于stack exchange,提问作者BritneyCoding
相关产品推荐
相关产品推荐

