如何在两个数组之间进行比较并检查其中一个项目是否在第二个数组中?

时间:2014-01-01 15:41:26

标签: javascript jquery arrays

我有两个值为

的数组
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。

4 个答案:

答案 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));

http://jsfiddle.net/bgK5q/

答案 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;

FIDDLE