• 关于对数组的操作(去重,取不同元素,取相同元素)


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

    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据测试使用对象+单个数组遍历的方法更高效一点。

  • 相关阅读:
    java -> final与static 关键字
    软件技术人员需要对数字的敏感性
    如何对抗放假综合症
    IT传统组织结构及新型扁平化组织
    别人的工作台系列三
    别人的工作台系列二
    外包公司做遗留项目有意思么?
    一些外国网站长时间不响应,点叉才能打开的问题
    别人的工作台系列
    2014年干了什么
  • 原文地址:https://www.cnblogs.com/webhmy/p/11393008.html
Copyright © 2020-2023  润新知