我有两个值为
的数组a = [1,2,3,4,5];
b = [1,3,5];
如果b中的所有项目都在a中,那么我想返回true
另一个例子
a = [123,55,12,66]
b = [123,551]
将返回false,因为551不在
中我试图查看b中的所有项目,如果我收到的项目不在,则返回false。
答案 0 :(得分:3)
将.every()
与.indexOf()
一起使用。
b.every(function(n) {
return a.indexOf(n) > -1;
});
您还可以创建可重用的函数,并将第二个参数设置为要搜索的数组。
function itemIsInThis(n) {
return this.indexOf(n) > -1;
}
并像这样使用它:
b.every(itemIsInThis, a);
.every()
的第二个参数(以及大多数其他Array迭代方法)将设置回调的this
值,因此我们只需将this
设置为a
阵列。
答案 1 :(得分:2)
只需一个简单的循环
function allIn(needles, haystack) {
var i = needles.length;
while (i--) // loop over all items
if (haystack.indexOf(needles[i]) === -1) // normal existence check
return false; // failed test
return true; // none failed test
}
var a, b;
a = [1,2,3,4,5];
b = [1,3,5];
allIn(b, a); // true
a = [123,55,12,66];
b = [123,551];
allIn(b, a); // false
答案 2 :(得分:1)
您可以交叉数组并比较结果:
Array.prototype.intersect = function (arr1) {
var r = [], o = {}, l = this.length, i, v;
for (i = 0; i < l; i++) {
o[this[i]] = true;
}
l = arr1.length;
for (i = 0; i < l; i++) {
v = arr1[i];
if (v in o) {
r.push(v);
}
}
return r;
};
Array.prototype.containsAll = function (arr) {
return arr.intersect(this).length === arr.length;
};
var a = [123,55,12,66],
b = [123,551],
c = [1,2,3,4,5],
d = [1,3,5];
console.log(c.containsAll(d), a.containsAll(b));
答案 3 :(得分:1)
您可以使用$.grep
和$.inArray
更多jQuery'ish
$.grep(b, function(el) {return $.inArray(el, a)!=-1});
并返回一个布尔值比较长度
b.length == $.grep(b, function(el) {return $.inArray(el, a)!=-1}).length;