zoukankan      html  css  js  c++  java
  • 关于 js 2个数组取差集怎么取

    关于 js 2个数组取差集怎么取

    例如求var arr1 = [1]; var arr2 = [1,2];的差集
    方法一:

    1 Array.prototype.diff = function(a) {
    2     return this.filter(function(i) {return a.indexOf(i) < 0;});
    3 };
    4 [1,2].diff([1]);//[2]  

    方法二:

     1 var isNaN = Number.isNaN;
     2 var difference = function(arr1, arr2) {
     3     return arr1.reduce(function(previous, i) {
     4         var found = arr2.findIndex(function(j) {
     5             return j === i || (isNaN(i) && isNaN(j));
     6         });
     7         return (found < 0 && previous.push(i), previous);
     8     }, []);
     9 };
    10 
    11 
    12 var arr1 = [1];
    13 var arr2 = [1, 2];
    14 
    15 console.log(difference(arr2, arr1)); //[ 2 ]

    方法三:

     1 // ES6 的 Set 来处理,这是真正按照数学上的集合来进行的,不会有重复元素
     2 var subSet = function(arr1, arr2) {
     3     var set1 = new Set(arr1);
     4     var set2 = new Set(arr2);
     5 
     6     var subset = [];
     7 
     8     for (let item of set1) {
     9         if (!set2.has(item)) {
    10             subset.push(item);
    11         }
    12     }
    13 
    14     return subset;
    15 };
    16 //普通方法
    17 var subSet = function(arr1, arr2) {
    18     var len = arr1.length;
    19     var arr = [];
    20 
    21     while (len--) {
    22         if (arr2.indexOf(arr1[len]) < 0) {
    23             arr.push(arr1[len]);
    24         }
    25     }
    26 
    27     return arr;
    28 };

     方法四:

     1 // 数组求差值
     2 var arr1 = [1, 2, 4, 9, 0];
     3 var arr2 = [2, 4, 7, 8];
     4 
     5 var difference = function(arr1, arr2) {
     6   var diff = [];
     7   var tmp = arr2;
     8 
     9   arr1.forEach(function(val1, i){
    10     if (arr2.indexOf(val1) < 0) {
    11       diff.push(val1);
    12     } else {
    13       tmp.splice(tmp.indexOf(val1), 1);
    14     }
    15   });
    16 
    17   console.log(diff.concat(tmp));
    18 }
    19 
    20 // 输出 [ 1, 9, 0, 7, 8 ]
    21 difference(arr1, arr2);
     
  • 相关阅读:
    SQLSERVER 远程登录18456错误
    谁用掉了我的数据库空间?
    Zabbix-微信报警
    Mailx安装与使用
    Redis-集群操作
    Redis-集群部署
    十、Zabbix-自动关联模板
    九、Zabbix-触发器
    八、Zabbix-应用集、监控项
    七、Zabbix-模板,应用集,监控项,触发器
  • 原文地址:https://www.cnblogs.com/jiechen/p/5694966.html
Copyright © 2011-2022 走看看