确定一个数组是否包含JavaScript/CoffeeScript中另一个数组的内容

Zec*_*eck 30 javascript arrays coffeescript

在JavaScript中,如何测试一个数组是否具有另一个数组的元素?

arr1 = [1, 2, 3, 4, 5]
[8, 1, 10, 2, 3, 4, 5, 9].function_name(arr1) # => true
Run Code Online (Sandbox Code Playgroud)

Exp*_*lls 69

没有set函数可以做到这一点,但你可以简单地做一个ad-hoc数组交集并检查长度.

[8, 1, 10, 2, 3, 4, 5, 9].filter(function (elem) {
    return arr1.indexOf(elem) > -1;
}).length == arr1.length
Run Code Online (Sandbox Code Playgroud)

一种更有效的方法是使用.every哪种方法会在假的情况下短路.

arr1.every(elem => arr2.indexOf(elem) > -1);
Run Code Online (Sandbox Code Playgroud)

  • 这肯定需要最少量的代码,但是当它意识到元素不在arr1中时,它会进行完整的枚举而不是停止.所以它可能不如@valentinas的解决方案那么高效. (5认同)
  • @bygrace if array.some { elem => arr2.indexOf(elem) === -1 } return false 怎么样? (2认同)

val*_*nas 18

您可以使用array.indexOf():

伪代码:

function arrayContainsAnotherArray(needle, haystack){
  for(var i = 0; i < needle.length; i++){
    if(haystack.indexOf(needle[i]) === -1)
       return false;
  }
  return true;
}
Run Code Online (Sandbox Code Playgroud)