javascript - 是否有一个函数可以在javascript中查找具有重复元素的子数组?

标签 javascript jquery arrays sub-array

我现在正在编写一个 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],无法区分大小写。

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

最佳答案

试试这个:

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

这是demo

关于javascript - 是否有一个函数可以在javascript中查找具有重复元素的子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26347699/

相关文章:

javascript - Ember 2,使用 Ember.run.debounce 调用路由中的函数

c - 数组在 C 中给出不同的输出?

javascript - 如何在 <canvas> 中绘制一条在 Safari/Chrome/Firefox 中看起来相同的对 Angular 线?

javascript - 将字符串解析为 Javascript 中的原始值

javascript - 动态添加的控件属性显示为控件 =""而不是控件

javascript - 在 JS/JQuery 中,我可以从多维数组中提取单个元素并将其存储在另一个数组中吗?

jquery - 如何使用 FullCalendar 将事件添加到 Google 日历

c++ - 防止指针作为数组传递

javascript - Douglas Crockford 所说的 'constructed in a different window or frame' 是什么意思?

php - 如何在不使用ajax的情况下制作弹出式聊天应用程序