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

JS筛选属性不一致的对象数组时如何避免访问不存在属性报错

最优实现代码

基于ES2020+的可选链操作符可以用最简洁的方式实现需求:

const filteredData = data.filter(item => item?.airplane > 5)

逻辑说明

  • 可选链运算符?.会先做安全校验:如果对象不存在airplane属性,或者对象本身为null/undefined,会直接返回undefined,不会抛出属性访问错误
  • undefined和数值比较时undefined > 5结果为false,因此没有airplane属性的对象会被自动过滤,完全匹配筛选要求
  • 你提到的原代码报错大概率是因为数组中存在null/undefined类型的项,直接访问属性才会抛出错误,上述可选链写法可以兼容这种异常场景

低版本兼容方案

如果运行环境不支持ES2020的可选链语法,可以用原生属性判断实现:

const filteredData = data.filter(item => {
  return Object.prototype.hasOwnProperty.call(item, 'airplane') && item.airplane > 5
})

这里用Object.prototype.hasOwnProperty.call而不是直接调用item.hasOwnProperty,是为了避免对象自身重写了hasOwnProperty方法导致的判断异常,兼容性和鲁棒性更高。

内容的提问来源于stack exchange,提问作者RoktSe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:18:02