JavaScript数组对象过滤疑问:为何代码返回空数组?
问题原因分析与修复方案
你的代码返回空数组的核心问题是判断条件逻辑错误:
你在filter回调里用person.yearOfDeath === true检查属性是否存在,但数组里每个对象的yearOfDeath都是数字类型的年份值(比如1970、2011),数字和布尔值true的严格全等(===)比较结果永远是false,导致过滤函数没有匹配到任何元素,最终返回空数组。
正确的判断方式(任选其一)
直接检查属性是否存在:
return 'yearOfDeath' in person;只要对象拥有该属性,无论值是什么(哪怕是
null或0)都会被保留。检查属性值不为
undefined:return person.yearOfDeath !== undefined;适用于属性可能被显式设置为
undefined的场景。利用真值判断(适合你的年份场景):
return !!person.yearOfDeath;因为你的年份都是正数,属于“真值”,这种方式可以快速筛选出有有效年份值的对象。
修复后的完整代码示例
const people = [{ name: "Carly", yearOfBirth: 1942, yearOfDeath: 1970, }, { name: "Ray", yearOfBirth: 1962, yearOfDeath: 2011, }, { name: "Jane", yearOfBirth: 1912, yearOfDeath: 1941, }, ]; const findTheOldest = function(array) { return array.filter(person => 'yearOfDeath' in person); }; console.log(findTheOldest(people)) // 输出原数组所有对象
内容的提问来源于stack exchange,提问作者DKXP
相关产品推荐
相关产品推荐

