0

我现在正在编写一个 javascript 来过滤掉包含特定子数组的数组。当然我可以自己编写函数,但我只是好奇是否在 javascript 或其他 javascript 库中已经有一些内置函数可以做到这一点,或者是否有简单的方法只需几行就可以做到这一点。

我发现如果子数组中的所有元素都是唯一的,我可以使用 underscore.js。有一个相交功能,我可以检查相交后的长度,看看长度是否正确。但是,如果子数组中有重复值,则该函数会失败。

例如,

_.intersection([1, 2, 3, 4, 5], [2, 1]);

这将返回 [1, 2] 并通过检查长度我会知道这个数组包含子数组。

但是,当子数组中有重复值时,

_.intersection([1, 1, 2, 3, 4, 7, 10], [1, 1, 2]);
_.intersection([1, 2, 3, 4], [1, 1, 2]);

两者都将返回 [1, 2] 并且无法区分大小写。

是否有其他我可以使用的预构建功能,或者是否有一种简单的方法可以在几行内完成这项工作?

4

1 回答 1

2

尝试这个:

function contains(a, b) {
    // sort arguments
    if(a.length < b.length) {
        var temp = a;
        a = b;
        b = temp;
    }
    // copy array
    a = a.slice();
    return b.every(function(elm) {
        var index = a.indexOf(elm);
        if(index !== -1) {
            // remove the found element
            a.splice(index, 1); 
            return true;
        }
        return false;
    });
}

console.log(contains([1, 1, 2], [1, 2, 3, 4, 7, 10])); // logs false
console.log(contains([1, 1, 2], [1, 1, 2, 3, 4, 7, 10])); // logs true
console.log(contains([1, 2, 3, 4, 7, 10], [1, 1, 2])); // logs false
console.log(contains([1, 1, 2, 3, 4, 7, 10], [1, 1, 2])); // logs true

这是演示

于 2014-10-13T20:06:47.307 回答