两个数组 之间 取 差集,交集,并集

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>    
</head>
<body>
    <script type="text/javascript">
        //数组判断是否含有某个元素
        Array.prototype.contains = function (obj) {
          var i = this.length;
          while (i--) {
            if (this[i] === obj) {
              return true;
            }
          }
          return false;
        }
        //数组去重
        Array.prototype.uniquelize = function() {
                var ra = new Array();  
                 for(var i = 0; i < this.length; i ++){  
                     if(!ra.contains(this[i])){  
                        ra.push(this[i]);  
                     }  
                 }  
                 return ra;    
        };
        //交集    
        Array.prototype.jiaoji = function(obj) {
            return this.uniquelize().filter(function(o){
                return obj.contains(o) ? o : null;
            });
        };
        //差集
        Array.prototype.minus = function(obj){  
             return this.uniquelize().filter(function(o){
                 return obj.contains(o) ? null : o
             }); 
        };  
        //并集
        Array.prototype.bingji = function(obj) {
            return this.concat(obj).uniquelize();  
        };

        let arr1=new Array();
        let arr2=new Array();
        arr1=[1,2,2,3,3,4,4,5,6,7,8,9];
        arr2=[1,3,5,7,9];
        document.write('数组1---->'+arr1+'<br>数组2---->'+arr2);
        document.write('<br>');
        document.write('交集是:'+arr1.jiaoji(arr2));
        document.write('<br>');
        document.write('差集是:'+arr1.minus(arr2));
        document.write('<br>');
        document.write('并集是:'+arr1.bingji(arr2));
        document.write('<br>');
    </script>
</body>
</html>

临时写,有问题可以交流,对于 其他的 余集 补集 合集 懒得区分了 上面三种挺常用的,仅供参考。

参照 这篇文章 其实也有其他比较好的实现方法 https://segmentfault.com/q/10...

之前都没有注意到includes这个方法,参考 https://developer.mozilla.org... ,可以直接实现判断当前数组是否包含某指定的值。 其实我觉得我写的contains 相当于 includes函数 ,会后我再看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值