问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...其他人都无问题,确定网络连接无问题,请问是什么原因? 描写花朵从花蕾到开放的句子 描写花蕾的优美句子 ...毒毛和鲜艳色斑,一般食虫鸟不敢捕食,这在生物学上属于…( )A.保护... 安徽名人出身地 山东中专学校有哪些? 山东现代职业学院毕业是本科还是大专还是高职? 我春考考了374我不知道报哪个学校 山东现代学院中专部好不好 为什么我号卖了100元藏宝阁待审核金就40元 是咋么回事呀 体育研究生的英语分数线是不是低点? 体育考研,我是陕西的,现在大二学体育教育专业,如果考研的话,英语有什么要求。英语很差的话怎么办? 体育教育专业考研英语要考几分 考研英语一般多少分? 体育考研英语分数线会长吗 体育生考研,英语相对其他专业是否较低?需要多少分? 体育专业考研究生英语要考多少分才能过? qq音乐下载视频表示已经下载 QQ音乐下载地址 qq音乐中下载歌曲 2012年山东幼师资格证什么时候报名?谢谢! 2015年海阳幼师教师资格证报考什么时间报名 你好我想问一下山东青岛幼师事业编考试需要在哪个网站报名,还有需要考哪些书,一年有几次考试分别在几月 2011山东省幼师资格证报名 菏泽幼师资格证去哪报名什么时候报名 威海文登中小学音体美和幼儿教师招聘什么时候报名? 手机遥控了电视以后,遥控器就不好使了,我只想恢复用遥控器遥控电视,这个该怎么办呢 请问2012年山东青岛(幼师)教师资格证的报名时间及网上报名方法? 风行电视换个遥控接收器多少钱65寸? 山东诸城幼师资格证报名时间及方法 js 数组交叉问题 怎么把数组交叉成这样? js数组的concat和map方法都会返回新数组,你造吗? 在JavaScript 中,如何求出两个数组的交集和差集? 关于JS里面取得一个数组的集合的问题 两个数组如何对应相加 js 高中生的帅气鞋子和白袜子 JS比较一个数组元素是否包含于另外一个数组 长风衣配什么鞋子 帅气板鞋高帮款,帅气吗 这身劲舞团YY男女从头到脚各叫什么 夏天穿什么鞋子帅气1000~2000左右 李现脚踩PUMA现身,哪个品牌运动鞋最帅? 男生穿板鞋和帆布鞋哪个帅气? 百度安全验证 NBA中谁的篮球鞋最帅 我把梦撕了一夜,不知道明天该怎么写,暖暖的风淡淡的吹,是什么歌?拜托各位大神 我把梦撕了一夜,不知道明天该怎么写,暖暖的风淡淡的吹,是什么歌?谢谢了,大神帮忙啊 雷婷唱;做你的爱人MP3,今生最爱MP3,撕夜MP3 高腰工装裤和马丁靴是不是绝配呀? 求雷婷的撕夜 链接地址?谢谢