使用filter处理对象数组返回空数组,如何提取name和age属性?
问题分析与解决:提取数组对象指定属性到新数组
首先得说,你用错数组方法啦!咱们先拆解下问题:
你原本的需求是提取每个对象里的name和age属性,生成新的对象数组,但你用了filter()函数——这个函数的作用是筛选出原数组中满足条件的整个元素,而不是用来提取属性的。
不过按你给出的原数组来看,每个对象都有name和age,理论上filter应该返回完整的原数组才对,会不会是你实际运行时的数组里,有些对象的name或age是undefined、空值这类会被判断为false的内容?这才导致返回了空数组。但不管怎样,filter完全不是做“提取属性”这件事的正确工具。
正确实现方法
要提取指定属性生成新数组,应该用map()函数,它的作用就是遍历数组,把每个元素转换成你想要的新格式:
const arr = [ { name: "john", age: 24, gender: "male" }, { name: "jane", age: 27, gender: "female" }, { name: "joe", age: 29, gender: "male" } ]; const newFields = arr.map(item => ({ name: item.name, age: item.age }));
运行这段代码后,newFields就会是:
[ { name: "john", age: 24 }, { name: "jane", age: 27 }, { name: "joe", age: 29 } ]
额外优化:处理可能缺失属性的情况
如果你的数组里可能存在缺少name或age的对象,可以先通过filter()过滤掉这些无效项,再用map()提取属性:
const newFields = arr .filter(item => typeof item.name !== 'undefined' && typeof item.age !== 'undefined') .map(item => ({ name: item.name, age: item.age }));
这样就能确保最终的新数组里,每个对象都同时拥有name和age属性啦。
内容的提问来源于stack exchange,提问作者blankface
相关产品推荐
相关产品推荐

