我已经看过很多关于如何在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)
就我而言,我是否走在正确的轨道上?
您想要检查数组中任何元素的值是否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)