如何在for循环中访问子数组的长度?

时间:2019-06-24 20:11:27

标签: javascript

我有一个2D数组,我试图操纵/合并类似的条目。我在要标记为删除的数组的第3个索引上按-1。这是rowArray的示例:

[
   [44,16,0,-1],
   [44,16,1,-1],
   [44,16,0]
]

在我的for循环中,我递减了数组,如果rowArray[i][3]存在,我试图从矩阵中弹出该数组。我的问题是在我的if中,我总是遇到问题。当我使用时:

if( rowArray[i][3] )..if( rowArray[i][3] !== 'undefined')..等,然后我收到TypeError:

Uncaught TypeError: Cannot read property 'length' of undefined

我也尝试使用:

if( rowArray[i].length > 3 ),但这给了我错误: Uncaught TypeError: Cannot read property 'length' of undefined

这是我的代码:

     rowArray = [ [44, 16, 0, -1], [44, 16, 1, -1], [44, 16, 0] ];
     for (var i = 1; i < rowArray.length; i++) {
       if (rowArray[parseInt(i - 1)][0] == rowArray[i][0] && rowArray[parseInt(i - 1)][1] == rowArray[i][1]) {
         rowArray[i][2] += parseFloat(rowArray[parseInt(i - 1)][2]);
         rowArray[parseInt(i - 1)][3] = -1;
       }
     }
     for (var i = rowArray.length; i >= 0; i--) {
       console.log(rowArray[i].length);
       if (rowArray[i][3] !== 'undefined') {
         rowArray.splice(i, 1);
       }
     }

预期输出:

[[44,16,1]]

我应该提到我正在使用jQuery 3.4.0。一如既往,也可以寻求更好的解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:3)

问题在于,在第二个循环中,您从rowArray.length开始,这是不正确的,因为最后一项是rowArray.length-1。那是因为数组从0开始。所以您的第二个循环是这样的:

for (var i = rowArray.length-1; i >= 0; i--) {
   console.log(rowArray[i].length);
   if (rowArray[i][3] !== 'undefined') {
     rowArray.splice(i, 1);
   }
 }