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
相关产品推荐
相关产品推荐

