使用嵌套for循环遍历JavaScript二维数组时读取length出现undefined问题
问题原因与解决方法
你的代码出现undefined报错的核心原因是数组索引越界:
JavaScript数组的索引从0开始,arr.length的值是3,外层循环初始i=3时,arr[3]并不存在(数组只有arr[0]、arr[1]、arr[2]三个元素),此时arr[i]是undefined,自然无法读取length属性。
修正后的代码如下:
let arr=[[1,2,3],[4,5,6],[7,8,9]]; // 外层循环从最后一个元素的索引(arr.length - 1)开始 for (let i = arr.length - 1; i >= 0; i--) { console.log(arr[i]); // 内层循环同样从子数组最后一个元素的索引开始 for (let n = arr[i].length - 1; n >= 0; n--) { console.log(arr[i][n]); } }
额外说明:
- 不管正向还是反向遍历数组,索引的有效范围始终是
0到length - 1,反向遍历时起始值必须设为length - 1,才能保证访问到的是数组内的有效元素 - 内层遍历子数组时同理,必须用
arr[i].length - 1作为起始索引,避免访问到子数组外的undefined
内容的提问来源于stack exchange,提问作者Yusuf Khan
相关产品推荐
相关产品推荐

