JavaScript - 比较两个数组

Mon*_*757 3 javascript arrays

我已经看过很多关于如何在JavaScript中比较两个数组的帖子,如果你找到匹配的话就做点什么.我想知道如何写相反的东西.我有两个阵列,当我找不到匹配时我想做点什么.

var a = [1,2,3,5];
var b = [4,7,5,5];


for(i=0;i<a.length;i++){
    for(j=0;j<b.length;j++){
       if(b[j]===a[i]){
          //do something
       }
   }
 }

 //somehow return 4, 7
Run Code Online (Sandbox Code Playgroud)

基本上,我想找到与上述相反的方法.如果我找不到比赛,我想表演一个动作.我的其他声明会在哪里?

   loop1:                                                                                          
        for(var i=0;i<a.length;i++){                                                                                                                        
            loop2:                                                                                        
            for(var j=0;j<b.length;j++){                                                                         
                if(b[j]==a[i]){                                          
                    console.log("break loop");                                                            
                    break loop2;                                                                          
                }                                                                                         
                else{                                                                                     
                    continue loop1;                                                                              
                }                                                                                         
            }                                                                                             
        }
Run Code Online (Sandbox Code Playgroud)

就我而言,我是否走在正确的轨道上?

joh*_*bri 7

您想要检查数组中任何元素的值是否a[]存在b[],并且您希望在"不匹配"的情况下"执行某些操作".

有许多不同的方法可以考虑"不匹配"的情况.

在您的第一个示例中,每次找到匹配时"执行某些操作",它将检查每个元素的值a[],并将该值b[]逐个地与所有元素进行比较.因此,此比较过程不依赖于匹配的位置.此外,如果特定元素的值a[]存在于其中的多个位置b[],或者如果特定元素的值b[]存在于其中的多个位置a[],则代码将为同一元素的多个匹配中的每一个"做某事".

因此,对于您提供的样本数据:

var a = [1,2,3,5];
var b = [4,7,5,5];
Run Code Online (Sandbox Code Playgroud)

代码将"做什么"时,发现的"五·四"元素a[]相匹配的"第三"的元素b[],它会"做一些事情"了,当它发现的"五·四"元素a[]的"五·四"元素匹配b[].我认为这就是你想要它的方式,但如果你只想a[]在一个"或更多"的地方找到一个元素,那么你只想一次"做某事" b[],那么你只需要添加一个"休息"; 声明,紧接着"做某事"声明.

所以,对于你的问题,你说过,你想要"反对":当你找不到匹配时"做某事".

从字面上看,你只需改变声明:"if(b[j]===a[i])"到:"if(b[j] != a[i])".现在,这可能不是你想要的,因为"不匹配"的情况可能会经常发生:

for(i=0;i<a.length;i++){
    for(j=0;j<b.length;j++){
        if(b[j] != a[i]){
            // do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


另一种可能性是,如果在a[]任何地方都找不到元素的值,你想要"做某事" b[].为此,您将检查每个元素的值a[],并将该值b[]逐个地与所有元素进行比较,如果在检查了所有元素的值后,b[]找不到与当前元素的值匹配的值的a[],那么你将"有所作为".

在这种情况下,如果你找到了一个匹配从目前的价值a[],在b[]进一步检查该元素a[]就没有必要.你想跳过休息,并开始检查的下一个元素a[]到的元素b[].为此,您需要使用"continue outerloop;".

outerloop:
for(i=0;i<a.length;i++){
    for(j=0;j<b.length;j++){
        if(b[j] === a[i]){
            continue outerloop;
        }
    }
    // if we get to here, then no value
    // of b[] matched the a[] value, so:
    // "do something"
}
Run Code Online (Sandbox Code Playgroud)


第三种可能性,就是你想"做某事",只有一次,如果在任何a[]地方都找不到任何元素b[].为此,您将检查每个元素的值a[],并将该值b[]逐个地与所有元素进行比较,如果在检查了所有元素的值后,b[]找不到与当前元素的值匹配的值的a[],您可以设置一个"标志",并退出使用的所有循环"break outerloop;".然后在最后,如果标志是"设置",你可以"做某事".

bflag=false;
outerloop:
for(i=0;i<a.length;i++){
    for(j=0;j<b.length;j++){
        if(b[j] === a[i]){
            continue outerloop;
        }
    }
    // if we get to here, then no value
    // of b[] matched the a[] value, so, 
    // set the flag (bflag)
    bflag=true;
    break outerloop:
}

if(bflag){
    // "do something"
}
Run Code Online (Sandbox Code Playgroud)

如果将此代码作为函数调用,则可以简化一下:

outerloop:
for(i=0;i<a.length;i++){
    for(j=0;j<b.length;j++){
        if(b[j] === a[i]){
            continue outerloop;
        }
    }
    // if we get to here, then no value of b[] matched 
    // the a[] value, so, do-something and return "failed":
    // "do something"
    return false;
}

// all elements of a[] were matched to 
// elements of b[], so: return "success"
return true;
Run Code Online (Sandbox Code Playgroud)