JS过滤数组时报Cannot read properties of undefined (reading 'items')如何修复
错误原因
- 语法错误:
a.["1"]属于非法语法,JavaScript中访问对象属性时,点运算符和方括号运算符不能同时叠加使用。如果属性名是数字、包含特殊字符或者是变量,直接使用方括号写法a["1"]即可。 - 边界场景未兼容:如果数组中存在部分项没有
"1"属性,或者"1"属性下不存在items,直接链式访问会触发读取undefined属性的报错。
修复方案
方案1(现代JS环境,推荐)
使用可选链运算符处理空值兼容,同时修正语法错误:
const filterResult = data.filter( (a) => a?.["1"]?.items?.Part1 === true );
说明:
- 去掉
a与["1"]之间多余的.,修复语法问题 ?.可选链会在链路中某一层值为undefined/null时直接终止返回undefined,不会抛出报错,不符合要求的项会被自动过滤- 使用严格相等
===替代==,避免隐式类型转换导致的逻辑异常
方案2(兼容旧环境)
如果运行环境不支持ES2020的可选链特性,用逐层判空的写法实现同等效果:
const filterResult = data.filter( (a) => a["1"] && a["1"].items && a["1"].items.Part1 === true );
内容的提问来源于stack exchange,提问作者JS3
相关产品推荐
相关产品推荐

