有没有一种简单的方法可以知道if和array是否包含另一个数组的所有元素?
示例:
var myarray = [1,2,3];
var searchinarray = [1,2,3,4,5];
searchinarray包含myarray的所有元素,所以这应该返回true。
此致
答案 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);