我现在正在编写一个 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/