二维数组遍历返回下一个位置时出现undefined错误求助(GAS)
问题解决
原数组与遍历代码
给定二维数组:
arr = [ ['A', 1, 2, 3, 4, 5], ['B', 6, 7, 8, 9, 10], ['C', 11, 12, 13, 14, 15], ['D', 16, 17, 18, 19, 20] ]
使用以下嵌套循环从后往前遍历:
for (row = arr.length - 1; row >= 0; row--) { for (column = arr[0].length - 1; column >= 0; column--) { if (arr[row][column] == 5) { return arr[row + 1][0] } } }
预期返回值为'B',但执行时出现错误:
Cannot read properties of undefined
错误原因分析
报错说明代码尝试访问undefined的属性,即arr[row + 1]为undefined,意味着row + 1超出了数组的合法索引范围(此数组合法行索引为0-3)。
结合你的预期与数组结构,理论上找到值为5的元素时,它所在的行索引是0,row + 1 = 1属于合法范围,不会出错。实际报错可能是以下原因之一:
- 实际运行的数组结构与你提供的不一致,比如5所在的行是数组最后一行(索引3),此时
row + 1 = 4超出数组长度,导致访问arr[4][0]时报错。 - 循环变量
row、column未用let/const声明,成为全局变量后被其他代码修改,触发判断时的row值并非预期的0。
解决方案
- 确认数组结构:确保5所在的行不是数组的最后一行,避免
row + 1越界。 - 规范变量声明:给循环变量添加
let声明,避免全局变量污染。 - 添加越界判断:在返回前先检查
row + 1是否在合法索引范围内,防止报错。
修改后的代码:
for (let row = arr.length - 1; row >= 0; row--) { for (let column = arr[0].length - 1; column >= 0; column--) { if (arr[row][column] === 5) { if (row + 1 < arr.length) { return arr[row + 1][0]; } // 处理越界情况,可根据需求返回null或提示信息 return null; } } }
若数组结构与你提供的一致,修改后的代码会正常返回'B',同时避免越界报错。
内容的提问来源于stack exchange,提问作者Drew254
相关产品推荐
相关产品推荐

