使用数组reduce方法提取年龄数组运行失败应如何修正?
问题原因分析
- 语法错误:
const是JavaScript关键字,大小写敏感,你代码里首字母大写的Const不符合语法规范,运行会直接抛出语法错误。 - reduce回调返回值错误:数组
push()方法的返回值是操作完成后数组的长度,而非修改后的数组本身。reduce要求每次回调执行结束后必须返回累计器acc用于下一轮迭代,你第一次执行回调后返回值为数字1,第二轮迭代时尝试对数字调用push()方法,就会抛出类型错误,自然无法得到预期的年龄数组。
修复方案
方案1:push后手动返回累计器(性能最优,不会生成额外中间数组)
const people = [ { name: 'siddiq', age: 20} , { name: 'anas', age: 19}] const arr = people.reduce((acc, curr) => { acc.push(curr.age) return acc }, [])
方案2:直接返回新数组(适合不可变数据场景)
const people = [ { name: 'siddiq', age: 20} , { name: 'anas', age: 19}] // concat写法 const arr = people.reduce((acc, curr) => acc.concat(curr.age), []) // 展开运算符写法 const arr2 = people.reduce((acc, curr) => [...acc, curr.age], [])
如果只是单纯提取对象数组的某个字段,使用Array.map()方法逻辑更直观,代码更简洁:
const arr = people.map(item => item.age)
内容的提问来源于stack exchange,提问作者Siddiq
相关产品推荐
相关产品推荐

