在多维数组中循环不显示预期的内容

时间:2016-08-09 21:27:24

标签: javascript arrays if-statement multidimensional-array

您好我尝试比较多维数组中的某些值,但是当我尝试使用console.log时,不要显示我认为正确但不显示的内容。我做错了什么?。

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

var position = 0;
for(var i =0; i < arr.length;i++){
  for(var j = 0; j < arr[i].length;j++){
    for(var g = 0; g < arr[i].length;g++){
      if(j != g && arr[i][j][0] === arr[i][g][0]){
        console.log(arr[i][j][1]);
      }
    }
  }
}
//expecting fish, bone;

问题出在if语句中,但我不明白为什么。

2 个答案:

答案 0 :(得分:1)

您尝试做的事情并不清楚。您使用的if语句将始终将'cat''dog'进行比较,这将导致无输出。

以下是您的代码,已修改以显示您要比较的内容。通常,通过提供有关实际发生情况的信息,添加额外的日志记录输出是一种合理的调试方法。

注意:我将g循环的起始位置更改为j + 1。您已经比较了先前运行循环中的所有条目,而不是那些g < j并且您不想将事情与自己进行比较的条目。显然,这意味着您的if声明不再需要检查j == g

您的比较是:

cat === dog is false
cat === dog is false
cat === dog is false

鉴于您在if声明中评估的所有条件均为false,您无法从console.log(arr[i][j][1]);

获得任何输出

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

var position = 0;
for(var i =0; i < arr.length;i++){
  for(var j = 0; j < arr[i].length;j++){
    //You will have already compared all entries with g<j and we don't
    //  want to compare against itself.
    for(var g = j + 1; g < arr[i].length;g++){
      console.log(arr[i][j][0] + ' === ' + arr[i][g][0] 
                  + ' ([' + i + '][' + j + '][0] === [' + i + '][' + g + '][0])'
                  + " is " + (arr[i][j][0] === arr[i][g][0]));
      if(arr[i][j][0] === arr[i][g][0]){
        console.log('Match: ' + arr[i][j][1]);
      }
    }
  }
}
&#13;
&#13;
&#13;

但是,根据您拥有的数据,您可能尝试做的是比较动物正在玩/吃的东西。如果是这种情况,问题可能是您在混淆哪个索引是多维数组的哪个部分。

&#13;
&#13;
var arr = [
    //         [a][0][c]                     [a][1][c]
    //[a][0][0]         [a][0][1]   [a][0][0]         [a][0][1]
    [[  'cat',            'fish' ],[  'dog',            'meat' ]],  // [0][b][c]
    [[  'cat',            'toy'  ],[  'dog',            'bone' ]],  // [1][b][c]
    [[  'cat',            'fish' ],[  'dog',            'bone' ]]   // [2][b][c]
];

var position = 0;
for(var i =0; i < arr.length;i++){
  for(var iP = i + 1; iP < arr.length;iP++){
    for(var j = 0; j < arr[i].length;j++){
      console.log(arr[i][j][1] + ' === ' + arr[iP][j][1] 
                  + ' ([' + i + '][' + j + '][1] === [' + iP + '][' + j + '][1])'
                  + " is " + (arr[i][j][1] === arr[iP][j][1]));
      if(arr[i][j][1] === arr[iP][j][1]){
        console.log('Match: ' + arr[i][j][1]);
      }
    }
  }
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果我理解你的意图,你必须改变你的循环和条件:

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

for (var i = 0; i < arr.length; i++){
  // compare only different rows
  for (var k = i + 1; k < arr.length; k++) {
    // inside each row, compare the columns elements
    for (var j = 0; j < arr[i].length; j++) {
      if (arr[i][j][0] === arr[k][j][0] && arr[i][j][1] === arr[k][j][1]) {
         //  ^^^ compare      ^^^ different   ^^^  rows        ^^^
         console.log(arr[i][j][1]);
      }
    }
  }
}
&#13;
&#13;
&#13;