使用forEach遍历JS对象数组提取指定字段结果不符合预期的原因
错误原因分析
你使用的实现代码:
const result = myArray.forEach(el => ({el.data.name, el.data.age}));
你的代码存在两个核心问题:
Array.prototype.forEach()方法仅用于遍历数组执行回调逻辑,没有返回值,执行后永远返回undefined,因此你把执行结果赋值给result变量,最终result的值只会是undefined,无法拿到转换后的新数组。这类数组映射转换的需求,应该使用专门用来生成新数组的Array.prototype.map()方法。- 回调函数的返回对象存在语法错误:
({el.data.name, el.data.age})的写法不符合JavaScript对象字面量的语法规则。如果要使用对象属性简写,必须先把对应属性提取到独立变量中,否则需要显式写出键名,正确的返回写法应该是{name: el.data.name, age: el.data.age}。
正确实现代码
// 基础写法,逻辑清晰易读 const result = myArray.map(el => { return { name: el.data.name, age: el.data.age } }); // 简化写法,通过嵌套解构简化代码 const result = myArray.map(({ data: { name, age } }) => ({ name, age }));
内容的提问来源于stack exchange,提问作者Leo Messi
相关产品推荐
相关产品推荐

