JS求数组差集的几种方法

 我来答
你的馨馨呀Ds
2018-08-22 · TA获得超过3402个赞
知道大有可为答主
回答量:1535
采纳率:94%
帮助的人:541万
展开全部

第一种:如果不考虑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;
};
suieucn
2018-08-22
知道答主
回答量:14
采纳率:75%
帮助的人:5.7万
展开全部

先从数学方面了解下,如何求差集。先求并集和交集,它们相差的部分为差集(补集)。

程序求解

方法一:利用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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式