手机版

JS计算两个数组的交集、差集、并集、补集(多种实现方式)

时间:2021-08-23 来源:互联网 编辑:宝哥软件园 浏览:

方法一:最普遍的做法

使用ES5语法来实现虽然会麻烦些,但兼容性最好,不用考虑浏览器Java脚本语言版本。也不用引入其他第三方库。

1,直接使用过滤、串联来计算

var a=[1,2,3,4,5]var b=[2,4,6,8,10]//交集var c=a .滤波器(函数(v){ return b.indexOf(v) -1 })//差集var d=a .滤波器(函数(v){ return b.indexOf(v)==-1 })//补集var e=a.filter(函数{返回!(b.indexOf(v) -1) }).concat(b.filter)()函数{返回!(a.indexOf(v) -1)}))//并集var f=a . concat(b . filter(函数(v)){ return!(a . indexof(v)-1)}));console.log('数组a:',a);console.log('数组b:',b);console.log('a与b的交集:',c);console.log('a与b的差集:',d);console.log('a与b的补集:',e);console.log('a与b的并集:',f);2,对排列进行扩展

(1)为方便使用,我们可以对数组功能进行扩展,增加一些常用的方法。

//数组功能扩展//数组迭代函数数组。原型。每个=函数(fn){ fn=fn ||函数.k;var a=[];var args=数组。原型。切片。呼叫(参数,1);for(var I=0;我这个长度;i ){ var res=fn.apply(this,[this[i],i].concat(args));if(res!=null)a . push(RES);}返回a;};//数组是否包含指定元素数组。原型。包含=函数(SuaRR){ for(var I=0;我这个长度;I){ if(this[I]==SuaRR){ return true;} }返回false}//不重复元素构成的数组数组。原型。uniquelize=function(){ var ra=new Array();for(var I=0;我这个长度;i ){ if(!ra。包含(这个[我]){ ra。推(这个[我]);} }返回ra;};//两个数组的交集Array.intersect=函数(a,b){ return a.uniquelize().每个(函数(o){返回b .包含(o)?o : null });};//两个数组的差集数组。减=函数(a,b){ return a.uniquelize().每个(函数(o){返回b .包含(o)?null : o });};//两个数组的补集数组。完成=函数(a,b){返回数组。负(数组。并集(a,b),Array.intersect(a,b));};//两个数组并集Array.union=函数(a,b){返回a.concat(b).uniquelize();};(2)使用样例

var a=[1,2,3,4,5]var b=[2,4,6,8,10]console.log('数组a:',a);console.log('数组b:',b);console.log('a与b的交集:',Array.intersect(a,b));console.log('a与b的差集:',数组。减(a,b));console.log('a与b的补集:',Array.complement,b));console.log('a与b的并集:',Array.union(a,b));方法二:使用ES6语法实现

1,实现原理

而在ES6中我们可以借助扩展运算符(.)以及一组的特性实现相关计算,代码也会更加简单些。

2,样例代码

var a=[1,2,3,4,5]var b=[2,4,6,8,10]console.log('数组a:',a);console.log('数组b:',b);var sa=新集合(a);var sb=新集合(b );//交集让intersect=a . filter(x=sb。has(x));//差集让减=a.filter(x=!某人有);//补集字母补码=[.a.filter(x=!某人有),b.filter(x=!sa。has(x))];//并集让unionSet=Array.from(新集合([.一个,b]));console.log('a与b的交集:',intersect);console.log('a与b的差集:',减);console.log('a与b的补集:',补语);console.log('a与b的并集:',UnionSet);方法三:使用框架实现

如果项目中有引入jQuery,那么实现起来也很简单。

var a=[1,2,3,4,5]var b=[2,4,6,8,10]console.log('数组a:',a);console.log('数组b:',b);//交集让intersect=$(a).过滤器(b)1 .toArray();//差集让减=$(a).不是(b)1 .toArray();//补集让补码=$(a).不是(b)1 .toArray().concat($(b)).不是. to array());//并集让unionSet=$ .唯一(a . concat(b));console.log('a与b的交集:',intersect);console.log('a与b的差集:',减);console.log('a与b的补集:',补语);console.log('a与b的并集:',UnionSet);1,直接使用过滤、串联来计算

var a=[1,2,3,4,5]var b=[2,4,6,8,10]//交集var c=a .滤波器(函数(v){ return b.indexOf(v) -1 })//差集var d=a .滤波器(函数(v){ return b.indexOf(v)==-1 })//补集var e=a.filter(函数{返回!(b.indexOf(v) -1) }).concat(b.filter)()函数{返回!(a.indexOf(v) -1)}))//并集var f=a . concat(b . filter(函数(v)){ return!(a . indexof(v)-1)}));console.log('数组a:',a);console.log('数组b:',b);console.log('a与b的交集:',c);console.log('a与b的差集:',d);console.log('a与b的补集:',e);console.log('a与b的并集:',f);运行结果如下:

2,对排列进行扩展

(1)为方便使用,我们可以对数组功能进行扩展,增加一些常用的方法。

//数组功能扩展//数组迭代函数数组。原型。每个=函数(fn){ fn=fn ||函数.k;var a=[];var args=数组。原型。切片。呼叫(参数,1);for(var I=0;我这个长度;i ){ var res=fn.apply(this,[this[i],i].concat(args));if(res!=null)a . push(RES);}返回a;};//数组是否包含指定元素数组。原型。包含=函数(SuaRR){ for(var I=0;我这个长度;I){ if(this[I]==SuaRR){ return true;} }返回false}//不重复元素构成的数组数组。原型。uniquelize=function(){ var ra=new Array();for(var I=0;我这个长度;i ){ if(!ra。包含(这个[我]){ ra。推(这个[我]);} }返回ra;};//两个数组的交集Array.intersect=函数(a,b){ return a.uniquelize().每个(函数(o){返回b .包含(o)?o : null });};//两个数组的差集数组。减=函数(a,b){ return a.uniquelize().每个(函数(o){返回b .包含(o)?null : o });};//两个数组的补集数组。完成=函数(a,b){返回数组。负(数组。并集(a,b),Array.intersect(a,b));};//两个数组并集Array.union=函数(a,b){返回a.concat(b).uniquelize();};(2)使用样例

var a=[1,2,3,4,5]var b=[2,4,6,8,10]console.log('数组a:',a);console.log('数组b:',b);console.log('a与b的交集:',Array.intersect(a,b));console.log('a与b的差集:',数组。减(a,b));console.log('a与b的补集:',Array.complement,b));console.log('a与b的并集:',Array.union(a,b));(3)运行结果同上面一样。

方法二:使用ES6语法实现

1,实现原理

而在ES6中我们可以借助扩展运算符(.)以及一组的特性实现相关计算,代码也会更加简单些。

2,样例代码

var a=[1,2,3,4,5]var b=[2,4,6,8,10]console.log('数组a:',a);console.log('数组b:',b);var sa=新集合(a);var sb=新集合(b );//交集让intersect=a . filter(x=sb。has(x));//差集让减=a.filter(x=!某人有);//补集字母补码=[.a.filter(x=!某人有),b.filter(x=!sa。has(x))];//并集让unionSet=Array.from(新集合([.一个,b]));console.log('a与b的交集:',intersect);console.log('a与b的差集:',减);console.log('a与b的补集:',补语);console.log('a与b的并集:',UnionSet);运行结果还是一样:

方法三:使用框架实现

如果项目中有引入jQuery,那么实现起来也很简单。

var a=[1,2,3,4,5]var b=[2,4,6,8,10]console.log('数组a:',a);console.log('数组b:',b);//交集让intersect=$(a).过滤器(b)1 .toArray();//差集让减=$(a).不是(b)1 .toArray();//补集让补码=$(a).不是(b)1 .toArray().concat($(b)).不是. to array());//并集让unionSet=$ .唯一(a . concat(b));console.log('a与b的交集:',intersect);console.log('a与b的差集:',减);console.log('a与b的补集:',补语);console.log('a与b的并集:',UnionSet);运行结果还是一样:

总结

以上是边肖介绍的两个数组的交集、差集、并集、补集的JS计算。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!如果你觉得这篇文章对你有帮助,请转载,请注明出处,谢谢!

版权声明:JS计算两个数组的交集、差集、并集、补集(多种实现方式)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。