您好我尝试比较多维数组中的某些值,但是当我尝试使用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语句中,但我不明白为什么。
答案 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]);
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;
但是,根据您拥有的数据,您可能尝试做的是比较动物正在玩/吃的东西。如果是这种情况,问题可能是您在混淆哪个索引是多维数组的哪个部分。
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;
答案 1 :(得分:0)
如果我理解你的意图,你必须改变你的循环和条件:
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;