对于循环和矩阵迭代问题:TypeError:无法读取未定义的属性“0”

Posted

技术标签:

【中文标题】对于循环和矩阵迭代问题:TypeError:无法读取未定义的属性“0”【英文标题】:For loop and matrix iteration issues : TypeError: Cannot read property '0' of undefined 【发布时间】:2022-01-17 07:59:34 【问题描述】:

编译我的代码时出现错误

TypeError: 无法读取未定义的属性“0”

我了解该错误本质上意味着代码正在尝试提取不存在的数组元素。这通常会发生,因为有一个 for 循环增量,没有任何终止边界。但是,across++ 的界限为 for(let across=0; across<matrix[0].length; across++) 我想知道是什么导致了错误信息。

上下文/任务:

成名后,CodeBots 决定一起搬进新大楼。每个房间都有不同的费用,其中一些是免费的,但有传言说所有的免费房间都闹鬼!由于 CodeBot 非常迷信,他们拒绝入住任何免费房间,或任何免费房间下方的任何房间。 给定矩阵,一个整数矩形矩阵,其中每个值代表房间的成本,您的任务是返回适合 CodeBots 的所有房间的总和(即:将所有未出现在下面的值相加一个 0)。 例子: 矩阵 = [[0, 1, 1, 2], [0, 5, 0, 0], [2, 0, 3, 3]] 输出应该是 解决方案(矩阵)= 9.


function solution(matrix) 
    let count = 0;
    
    for(let across=0; across<matrix[0].length; across++)
        for(let down=0; down<matrix.length; down++)
            if(matrix[across][down] == 0)
                across++;
                
            else
                count += matrix[across][down];
            
            
        
      

   return count; 
 
 

//[ [1, 1, 1, 0], [0, 5, 0, 1], [2, 1, 3, 10] ]
  //  0               1             2 

【问题讨论】:

相信你已经交换了across(列)和down(行)。 @jarmod 我不敢相信我错过了,盯着它看了一个多小时。非常感谢! 谢谢,非常感谢您的解释。我最初理解错误并认为它与across++ 部分有关。我缺乏判断力。再次感谢 【参考方案1】:

总而言之,您在数组访问中意外地转置了行和列。将各种数组访问代码更改为:

matrix[down][across]

关于调试的注意事项:错误消息提示在您使用matrix[across][down] 的地方,matrix[across] 的值一定是undefineddown 的值是0。这就是导致错误的原因:

TypeError: 无法读取未定义的属性“0”

这是因为across 超出范围。 javascript 不进行范围检查,在这种情况下只生成undefined。如果您的矩阵恰好有 3 行和 3 列,您就不会看到错误(尽管它会一直存在,等待将来失败)。

【讨论】:

以上是关于对于循环和矩阵迭代问题:TypeError:无法读取未定义的属性“0”的主要内容,如果未能解决你的问题,请参考以下文章

将循环迭代的矩阵保存在一个矩阵中

TypeError:参数值不可迭代或分布

TypeError:无法在 Django REST 框架中解压不可迭代的 int 对象

OpenCV 矩阵运算是不是比简单的循环迭代更快?

使用 for 循环迭代空矩阵

For循环中的三元运算符导致无限迭代