对于循环和矩阵迭代问题: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]
的值一定是undefined
和down
的值是0
。这就是导致错误的原因:
TypeError: 无法读取未定义的属性“0”
这是因为across
超出范围。 javascript 不进行范围检查,在这种情况下只生成undefined
。如果您的矩阵恰好有 3 行和 3 列,您就不会看到错误(尽管它会一直存在,等待将来失败)。
【讨论】:
以上是关于对于循环和矩阵迭代问题:TypeError:无法读取未定义的属性“0”的主要内容,如果未能解决你的问题,请参考以下文章