2017-06-15 191 views
0

我只对编码有一个基本的理解,希望对您有所帮助。我有这样的JS代码给我一个真正的错误日志中的所有腊肠狗出现在阵列中:来自多个阵列的匹配值

var myAnimal = "Sausage Dog"; 
var arrayAnimal =["Sausage Dog", "Tiger", "Sausage Dog", "Crocodile", "Lion"]; 
for (var i = 0; i < arrayAnimal.length; i++) { 
    if(myAnimal == arrayAnimal[i]) { 
    console.log("True"); 
    } else { 
     console.log("False"); 
    } 
} 

我怎么会做同样的任务,如果var myAnimal与多个字符串数组?

因此,它会检查每个动物myAnimal对var arrayAnimal中的每个动物,并返回所有事件的真/假。

有没有办法做到这一点?

+0

[请不要把问题标题标签(https://stackoverflow.com/help/tagging) – Liam

回答

2

类似这样的: 在arrayAnimal循环内循环myAnimal数组 - 检查它们是否相等。

var myAnimal = ["Sausage Dog", "Tiger"]; 
 
var arrayAnimal = ["Sausage Dog", "Tiger", "Sausage Dog", "Crocodile", "Lion"]; 
 
for (var i = 0; i < arrayAnimal.length; i++) { 
 
    for (var j = 0; j < myAnimal.length; j++) { 
 
     \t \t if(arrayAnimal[i] == myAnimal[j]) console.log('match'); 
 
    } 
 
}

+0

非常感谢,这是真的有帮助!得到这个更抽象的级别 - 你也有这个解决方案时,myAnimal是一个正则表达式而不是上述字符串的数组? –

1

创建使用Array#reduce所述myAniml阵列的字典,然后Array#maparrayAnimal使用字典。

var myAnimal = ["Sausage Dog", "Lion"]; 
 
var myAnimalDict = myAnimal.reduce(function(dict, str) { 
 
    dict[str] = true; 
 
    
 
    return dict; 
 
}, Object.create(null)); 
 

 
var arrayAnimal =["Sausage Dog", "Tiger", "Sausage Dog", "Crocodile", "Lion"]; 
 

 
var result = arrayAnimal.map(function(str) { 
 
    return !!myAnimalDict[str]; 
 
}); 
 

 
console.log(result);

+0

Upvoted您的答案,因为它也是一种工作方法。上面的循环方法只需要一点时间。 –

+0

它实际上是O(n),比在循环中有一个循环要快得多O(n^2) –

+0

我的意思是我的另一种方式,我的不好。编辑评论。 –

0
var myAnimal = ["Sausage Dog", "Tiger", "Sausage", "Crocodile", "Lion"]; 
var arrayAnimal =["Sausage Dog", "Tiger","Crocodile", "Lion"]; 
for (var i = 0; i < myAnimal.length; i++) { 
    for (var j = 0; j < arrayAnimal.length; j++) { 
     if (myAnimal[i] == arrayAnimal[j]) { 
      $('#demo').append("True</br>"); 
     } 
    } 
} 
+0

尽管代码本身可以回答这个问题,但最好还是提供解释和任何相关资源。 –