JavaScript中的array.contains(array)

时间:2014-10-09 05:49:08

标签: javascript arrays contains

有没有一种简单的方法可以知道if和array是否包含另一个数组的所有元素?

示例:

var myarray = [1,2,3];
var searchinarray = [1,2,3,4,5];

searchinarray包含myarray的所有元素,所以这应该返回true。

此致

3 个答案:

答案 0 :(得分:2)

以下是该功能的实现:

function contains(a, s) {
   for(var i = 0, l = s.length; i < l; i++) {
      if(!~a.indexOf(s[i])) {
         return false;
      }
   }
   return true;
}

这表明它符合您的描述:

> var myarray = [1,2,3];
> var searchinarray = [1,2,3,4,5];
> contains(myarray, searchinarray)
false
> contains(myarray, [1,2])
true
> contains(myarray, [2,3])
true

答案 1 :(得分:1)

包含函数应该只访问存在的数组成员,例如

var myArray = [1,,2];
var searchInArray = [1,2,3];

contains(myArray, searchInArray);

应该返回true,但是一个简单的循环解决方案将返回false,因为myArray[1]不存在,因此将返回 undefined searchInArray < / em>的。为了轻松避免这种情况而不使用 hasOwnProperty 测试,您可以使用数组every method

function contains(searchIn, array) {
  return array.every(function(v){return this.indexOf(v) != -1}, searchIn);
}

这样:

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

console.log(contains(s, a));  // true

如果您愿意,可以向所有Array实例添加 contains 方法:

if (typeof Array.prototype.contains == 'undefined') {
  Array.prototype.contains = function(a) {
    return a.every(function(v, i) {
      return this.indexOf(v) != -1;
    }, this);
  }
}

console.log(s.contains(a));      // true
console.log(s.contains([1,9]));  // false

对于没有 .every (IE 8?)的浏览器,您可能需要polyfill

答案 2 :(得分:0)

function compare(array, contains_array) {
 for(var i = 0; i < array.length; i++) {
  if(contains_array.indexOf(array[i]) == -1) return false;
 }
 return true;
}

compare(myarray, searchinarray);