如何检查多维数组索引是否存在?规避空属性读取报错
解决深层嵌套数组元素访问报错的问题
问题原因
你之前的判断逻辑失效,是因为直接在if中访问array[1][1][i][4][0][4][0][2][0]时,只要链式路径里任意一层元素是null或undefined,都会触发类型错误——比如array[1][1][i][4]不存在的话,再尝试读取[0]就会报错,根本走不到后续判断环节。
解决方法
方法1:使用可选链操作符(?.)
这是ES2020及以上版本支持的语法,能安全访问深层嵌套的元素,路径中某一层不存在时会直接返回undefined,不会抛出错误。配合空值合并运算符(??)还能按需设置默认值:
for (var i = 0; i < array[1][1].length; i++) { const targetValue = array[1][1][i]?.[4]?.[0]?.[4]?.[0]?.[2]?.[0]; if (targetValue !== undefined) { x[array[1][1][i][1]] = targetValue; } }
方法2:逐层手动判断(兼容低版本环境)
如果运行环境不支持可选链,就需要从外层到内层逐层检查每一个元素是否存在:
for (var i = 0; i < array[1][1].length; i++) { const item = array[1][1][i]; // 从外层到内层,每一层都做存在性校验 if (item && item[4] && item[4][0] && item[4][0][4] && item[4][0][4][0] && item[4][0][4][0][2] && item[4][0][4][0][2][0]) { x[item[1]] = item[4][0][4][0][2][0]; } }
方法3:封装安全访问工具函数
如果需要多次处理这类深层访问场景,可以封装一个复用性强的工具函数:
function getDeepValue(obj, path) { return path.reduce((current, key) => { return current && current[key] !== undefined ? current[key] : undefined; }, obj); } // 使用示例 for (var i = 0; i < array[1][1].length; i++) { const item = array[1][1][i]; const targetValue = getDeepValue(item, [4, 0, 4, 0, 2, 0]); if (targetValue !== undefined) { x[item[1]] = targetValue; } }
内容的提问来源于stack exchange,提问作者henxdl
相关产品推荐
相关产品推荐

