javascript - Javascript——在迭代时操作多维数组中的值
问题描述
我得到了一个矩阵,对于每个值为 0 的索引,我也必须将其正下方的索引设为 0。
for(let i = 0; i < matrix.length; i++) {
for(let j = 0; j < matrix[i].length;j++) {
//figure out what rooms not 0
if(matrix[i][j] !== 0) {
goodRooms.push(matrix[i][j])
} else {
matrix[i + 1][j] = 0;
}
}
}
我不断得到
TypeError: Cannot set property '0' of undefined
在else
声明中,我不确定为什么。
解决方案
更改else
为
else if(i < matrix.length - 1)
否则,如果您在最后一行并且值为0
,您将访问不存在的下一行。
最终代码应如下所示:
for(let i = 0; i < matrix.length; i++) {
for(let j = 0; j < matrix[i].length; j++) {
if(matrix[i][j] !== 0) {
goodRooms.push(matrix[i][j]);
} else if(i < matrix.length - 1) {
matrix[i + 1][j] = 0;
}
}
}
注意:这将在循环到达该行之前更改下一行。因此,如果第一行包含 0 值,则第二行将在循环访问它之前更改,因此当循环到达它时,该值已经为 0,因此整个列将递归设置为 0。
推荐阅读
- c# - C# 无法在 MainWindow.xaml.cs 中的 WPF 中创建方法
- python - 使用包的 Python Unicode 解码错误
- nginx - 404 nginx 服务器块中的目录
- python - 如何修复 def getmintemp() 行上的“方法没有参数”:
- php - 使用 PHP 删除所有 Cookie 仅删除单个 cookie
- php - 在下划线之间的字符串中查找值?
- android - OnActivityResult 中的数据绑定
- asp.net - 带有 dotnet 的 alpine docker 映像看不到我的应用程序
- angular - 在 Angular 10 测试期间获取动态 ID
- macos - 如何禁用 MacOS 终端的选项卡自动完成“相机闪光灯”?