JS求数组差集的几种方法
发布网友
发布时间:2022-05-01 19:28
我来回答
共3个回答
懂视网
时间:2022-05-14 22:07
这篇文章主要介绍了关于如何使用JS求数组差集的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
第一种:如果不考虑IE8的兼容性完全可以使用Foreach ,此方法求出arr1 减去 arr2的差集,
arr1 = [1,2,3,4];
arr2 = [1,2,3];
subSet = set2 = subset = (!
第二种是使用JQ 的merge和grep的配合使用求差集,兼容IE8 、chrome等主流游览器
alpha = [1, 2, 3, 4= [1,2,3= $.merge($.grep(a, $.inArray(i, b) == -1 $.inArray(i, a) == -1&& console.log( $.arrayIntersect(alpha, beta) );
//结果等于4
第三种使用ES6 的set 方法类似与foreach方法
var subSet = function(arr1, arr2) {
var set1 = new Set(arr1);
var set2 = new Set(arr2);
var subset = [];
for (let item of set1) {
if (!set2.has(item)) {
subset.push(item);
}
} return subset;
};
热心网友
时间:2022-05-14 19:15
第一种:如果不考虑IE8的兼容性完全可以使用Foreach ,此方法求出arr1 减去 arr2的差集,
arr1 = [1,2,3,4];
arr2 = [1,2,3];
var subSet = function (arr1, arr2) {
var set2 = new Set(arr2);
var subset = [];
arr1.forEach(function(val, index) {
if (!set2.has(val)) {
subset.push(val);
}
});
return subset;
};
//结果等于4
第二种是使用JQuery 的merge和grep的配合使用求差集,兼容IE8 、chrome等主流游览器
var alpha = [1, 2, 3, 4],
beta = [1,2,3];
$.arrayIntersect = function(a, b)
{
return $.merge($.grep(a, function(i)
{
return $.inArray(i, b) == -1;
}) , $.grep(b, function(i)
{
return $.inArray(i, a) == -1;
})
);
};
window.console && console.log( $.arrayIntersect(alpha, beta) );
//结果等于4
第三种使用ES6 的set 方法类似与foreach方法
var subSet = function(arr1, arr2) {
var set1 = new Set(arr1);
var set2 = new Set(arr2);
var subset = [];
for (let item of set1) {
if (!set2.has(item)) {
subset.push(item);
}
}
return subset;
};
热心网友
时间:2022-05-14 20:33
先从数学方面了解下,如何求差集。先求并集和交集,它们相差的部分为差集(补集)。
程序求解
方法一:利用ES6 Set的特性。
const arr1 = [...], arr2 = [...];
// 先利用Set中项不重复的特性,做出并集和交集
const union = new Set([...arr1, ...arr2]),
intersection = new Set(arr1.filter(i => arr2.includes(i)));
//计算差集
const difference = [...union].filter(i => !intersection.has(i));
方法二:循环(通用)
const arr1 = [...], arr2 = [...];
// 先做交集
const intersection = [];
for (var i = 0, n = arr1.length, item = arr1[i]; i < n; item = arr1[i += 1])
if (0 <= arr2.indexOf(item))
intersection.push(item);
// 分别计算每个的差集
const difference = [];
for (var i = 0, n = arr1.length, item = arr1[i]; i < n; item = arr1[i += 1])
if (0 > intersection.indexOf(item))
difference.push(item);
for (var i = 0, n = arr2.length, item = arr2[i]; i < n; item = arr2[i += 1])
if (0 > intersection.indexOf(item))
difference.push(item);
return difference;