You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维数组遍历返回下一个位置时出现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。

解决方案

  1. 确认数组结构:确保5所在的行不是数组的最后一行,避免row + 1越界。
  2. 规范变量声明:给循环变量添加let声明,避免全局变量污染。
  3. 添加越界判断:在返回前先检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 20:07:13