You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript数组对象过滤疑问:为何代码返回空数组?

问题原因分析与修复方案

你的代码返回空数组的核心问题是判断条件逻辑错误:
你在filter回调里用person.yearOfDeath === true检查属性是否存在,但数组里每个对象的yearOfDeath都是数字类型的年份值(比如1970、2011),数字和布尔值true的严格全等(===)比较结果永远是false,导致过滤函数没有匹配到任何元素,最终返回空数组。

正确的判断方式(任选其一)

  1. 直接检查属性是否存在:

    return 'yearOfDeath' in person;
    

    只要对象拥有该属性,无论值是什么(哪怕是null或0)都会被保留。

  2. 检查属性值不为undefined:

    return person.yearOfDeath !== undefined;
    

    适用于属性可能被显式设置为undefined的场景。

  3. 利用真值判断(适合你的年份场景):

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:53:11