多维数组循环错误

时间:2016-08-10 05:45:02

标签: javascript for-loop multidimensional-array while-loop

我尝试使用while循环遍历列,但每次我都收到错误,我想知道你们是否可以告诉我我做错了什么。 代码是这样的:

var arr = [
    [['cat', 'fish'],['dog', 'meat']],
    [['cat', 'toy'],['dog', 'bone']],
    [['cat', 'fish'],['dog', 'bone']]
];

var position = 0;
//can I do this in stead?
//while(arr.length > position){

while(true){
  var arrEnd = true;
  for (var k = 0; k < arr.length; k++) {
    if(arr.length > position){
      arrEnd = false;
    }
  }

  if(arrEnd){break;}

  for(var i =0; i < arr.length;i++){
    for(var j =0; j < arr.length;j++){
      if(i != j && arr[i][position][1] == arr[j][position][1]){
        console.log(arr[i][position]+'===='+arr[j][position]);
      }
    }
  }
  position++;
}
//Expected:
// "cat,fish====cat,fish" "cat,fish====cat,fish"
// "dog, bone====dog,bone" "dog, bone====dog,bone"
//Error getting: arr[i][position] is undefined

有什么问题?我无法看到这个问题。

2 个答案:

答案 0 :(得分:1)

你有一个三维数组。您最初对数组的第一个索引使用position,然后在发生错误的地方使用position来引用第二个索引。由于第一个维度比第二个维度长,因此最终会因为未定义请求索引的值而导致错误。

假设每个级别的内部数组长度相等,则可以:

var arr = [
    [['cat', 'fish'],['dog', 'meat']],
    [['cat', 'toy'],['dog', 'bone']],
    [['cat', 'fish'],['dog', 'bone']]
];

var position = 0;
while(true){
  var arrEnd = true;
  for (var k = 0; k < arr[0].length; k++) {
    if(arr[0].length > position){
      arrEnd = false;
    }
  }

  if(arrEnd){break;}

  for(var i =0; i < arr.length;i++){
    for(var j =0; j < arr.length;j++){
      if(i != j && arr[i][position][1] == arr[j][position][1]){
        console.log(arr[i][position]+'===='+arr[j][position]);
      }
    }
  }
  position++;
}

请注意第一个[0]循环中的其他for

但是,实际上,应该重新安排代码以更清楚地说明发生了什么,以便更容易看到这样的问题:

var arr = [
    [['cat', 'fish'],['dog', 'meat']],
    [['cat', 'toy'],['dog', 'bone']],
    [['cat', 'fish'],['dog', 'bone']]
];

for(var i=0; i < arr.length-1; i++){
  for(var j=i+1; j < arr.length; j++){
    for(var k=0; k < arr[i].length; k++){
      if(arr[i][k][1] == arr[j][k][1]) {
        console.log(arr[i][k]+'===='+arr[j][k]);
      }
    }
  }
}

答案 1 :(得分:0)

您的问题出在rect之外的while (true)position++。最终,for将大于1,从而导致您收到的确切错误。

还有一点需要注意,position的长度为3,而最大位置数(第二维索引)为1(因为您的子阵列中有2个数组)。

请尝试使用Array.prototype.forEach

,而不是嵌套的arr循环