美文网首页
js 获取两个数组的交集,并集,补集,差集

js 获取两个数组的交集,并集,补集,差集

作者: keknei | 来源:发表于2021-10-28 18:10 被阅读0次

    数组里我们分为简单数字或者字符串、对象的两种数据结构,简单数字或者字符串分别用es5es6来分别进行交集,并集,补集,差集

    1. 数组是简单数字或者字符串
      • ES5方式

        let arr1=[1,2,3,4,5],arr2=[4,5,6,7,8];
        //交集
        let intersection=arr1.filter(item=>arr2.indexOf(item)>-1);
        console.log("交集",intersection);
        //并集
        let union=arr1.concat(arr2.filter(item=>arr1.indexOf(item)==-1));
        console.log("并集", union);
        //补集 两个数组各自没有的集合
        let complement=[...arr1.filter(item=>arr2.indexOf(item)==-1),...arr2.filter(item=>arr1.indexOf(item)==-1)];
        console.log("补集", complement);
        //差集 数组arr1相对于arr2所没有的
        let diff=arr1.filter(item=>arr2.indexOf(item)==-1);
        console.log("差集",diff);
        
        es5方式的结果
      • ES6方式

        //数组是简单数字或者字符串的交集、并集、补集、差集  es6
        let arr1=[1,2,3,4,5],arr2=[4,5,6,7,8];
        let set1=new Set(arr1),set2=new Set(arr2);
        //交集
        let intersection=arr1.filter(item=>set2.has(item));
        console.log("交集",intersection);
        //并集
        let union=Array.from(new Set([...arr1,...arr2]));;
        console.log("并集", union);
        //补集 两个数组各自没有的集合
        let complement=[...arr1.filter(item=>set2.has(item)==false),...arr2.filter(item=>set1.has(item)==false)];
        console.log("补集", complement);
        //差集 数组arr1相对于arr2所没有的
        let diff=arr1.filter(item=>set2.has(item)==false);
        console.log("差集",diff);
        
        es6方式的结果
    2. 数组里是对象的
       let arr1=[
         {
           age: 1,
           name: "张三"
         },{
           age: 2,
           name: "李四"
         },{
           age: 3,
           name: "王五"
         },{
           age: 4,
           name: "赵六"
         }
       ];
      
       let arr2=[
         {
           age: 5,
           name: "Li"
         },{
           age: 6,
           name: "judy"
         },{
           age: 3,
           name: "王五"
         },{
           age: 4,
           name: "赵六"
         }
       ];
      
       //交集(两个数组相同的数据)
       let intersection=[];
       arr1.forEach(x=>{
         arr2.forEach(y=>{
           if(x.age==y.age){//找到相同的就push进新的数组
             intersection.push(x);
           }
         });
       });
       console.log("交集",intersection);
       //并集(两个数组的合并,数据都是唯一的,不重复)
       let union=[...arr1, ...arr2];
       arr1.forEach(x=>{
         arr2.forEach(y=>{
           if(x.age==y.age){//找到相同的就删除
             union.splice(union.findIndex(item=>item.age==x.age),1);
           }
         });
       });
       console.log("并集", union);
       //补集(两个数组中除了相同的数据)
       let complement=[...arr1, ...arr2];
       arr1.forEach(x=>{
         arr2.forEach(y=>{
           if(x.age==y.age){//找到就删除,删除完相同的
             complement.splice(complement.findIndex(item=>item.age==x.age),1);
             complement.splice(complement.findIndex(item=>item.age==y.age),1);
           }
         });
       });
       console.log("补集", complement);
       //差集(例如数组1中和数组2中不一样的数据)
       let diff=[...arr1];
       arr1.forEach(x=>{
         let flag=arr2.some(y=>x.age==y.age);
         if(flag){//如果有相同的就删除
           diff.splice(diff.findIndex(item=>item.age==x.age),1);
         }
       });
       console.log("差集", diff);
      
      数组里是对象的结果

    相关文章

      网友评论

          本文标题:js 获取两个数组的交集,并集,补集,差集

          本文链接:https://www.haomeiwen.com/subject/rrpfaltx.html