如何用includes()或其他方法过滤含age属性的对象数组?
问题分析与修复
代码里的两个关键问题
- 变量名写错了:你定义的数组叫
people,但过滤时用了没声明过的array,这直接导致array未定义,最终ages变量拿不到正确值,返回undefined。 - 过滤逻辑完全错了:就算改对变量名,
arr.includes('age')也没用——arr是整个数组,里面装的都是对象,根本不是字符串'age',这个判断永远返回false,过滤出来的结果会是空数组。你该检查的是每个数组里的对象有没有age属性,而不是整个数组里有没有'age'这个字符串。
修复后的代码
const people = [ {id: 1, name: 'Michael', age: 26}, {id: 2, name: 'Tom', age: 15}, {id: 3, name: 'Kevin', age: 56}, {id: 4, name: 'Christian', year: 1990}, ] // 写法一:检查对象是否包含age属性(含继承属性) const ages = people.filter(el => 'age' in el) // 写法二:只检查对象自身的age属性(更严谨) // const ages = people.filter(el => el.hasOwnProperty('age')) console.log(ages) // 输出结果:[{id:1, name:'Michael', age:26}, {id:2, name:'Tom', age:15}, {id:3, name:'Kevin', age:56}]
内容的提问来源于stack exchange,提问作者tamirlan
相关产品推荐
相关产品推荐

