zoukankan      html  css  js  c++  java
  • 关于对数组的操作(去重,取不同元素,取相同元素)

    我们在项目实践的过程中经常遇到的问题或者面试的时候经常被问到的问题就是对数组的操作,老生常谈的问题有:去重、取不同、取相同,本文主要记录这些常用的操作的简单、高效的实现方法。

    1、数组去重

    // 去重方法1--对象方法(es5)
          var arr = [1, 2, 3, 4, "a", "b", "c", 2, 3, "c"];
          var obj = {};
          var newArr = [];
          arr.forEach(item => {
            if (!obj[item]) {
              newArr.push(item);
              obj[item] = true;
            }
          });
    
          console.log('es5方法:',newArr)
    

    // 去重方法2--new Set()
          let arr = [1, 2, 3, 4, "a", "b", "c", 2, 3, "c"];
          let arrSet = new Set(arr);
          let newArr = Array.from(arrSet);
          console.log('set方法:',newArr)
    

    2、两个数组之间的比较

          // ES6获取
          let arr1 = ["a", "b", "c", 2, 3, 4];
          let arr2 = [4, 5, 6, "a", "ab", "c"];
    
          // 获取相同
          let sameArr = arr1.filter(x => arr2.includes(x));
          console.log("sameArr:",sameArr);
          
         // 获取不同
          let diffArr = arr1.filter(x => !arr2.includes(x)).concat(arr2.filter(x => !arr1.includes(x)))
          console.log("diffArr:",diffArr);
    

     // 获取相同(es5)
          var arr1 = ["a", "b", "c", 2, 3, 4];
          var arr2 = [4, 5, 6, "a", "ab", "c"];
          var obj ={};
          var sameArr =[];
          arr1.forEach(item=>{
            obj[item] = true
          });
    
          arr2.forEach(item =>{
            if(obj[item]){
              sameArr.push(item)
            }
          })
          console.log("sameArr:",sameArr);
    

          var arr1 = ["a", "b", "c", 2, 3, 4];
          var arr2 = [4, 5, 6, "a", "ab", "c"];
    
          // 去重后的数组 
          var arr =[];    
          var obj = {};      
          var sameObj = {};      
           
         // 连接2个数组,先去重,并记录重复的,获取到的去重数组再去掉重复过的元素,不就是不同的了吗
          var arr3 = arr1.concat(arr2);      
          arr3.forEach(item=>{
            if(!obj[item]){
              arr.push(item);
              obj[item] = true;
            }else{
              // 相同的记录下来,后面再去除
              sameObj[item] = true
            }
          });
    
          var diffArr =[]; 
          arr.forEach(item=>{
            if(!sameObj[item]){
              diffArr.push(item)
            }
          });
          console.log("diffArr",diffArr)
    

    总的来说:ES6后使用一些新的特性和方法会简单一点,ES5据测试使用对象+单个数组遍历的方法更高效一点。

  • 相关阅读:
    联想Thinkpad L460安装Win7 64位
    2019牛客暑期多校训练营(第六场)E 构造、原图是补图的同构图
    网络流24题 P2766 最长不下降子序列问题
    The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest B、H
    P4781 拉格朗日插值
    P4717 快速沃尔什变换FWT 模板题
    2019CCPC-江西省赛C题 HDU6569 GCD预处理+二分
    Gym 101917 E 简单计算几何,I 最大流
    51 Nod 1238 最小公倍数之和 V3 杜教筛
    51Nod 1237 最大公约数之和 V3 杜教筛
  • 原文地址:https://www.cnblogs.com/webhmy/p/11393008.html
Copyright © 2011-2022 走看看