zoukankan      html  css  js  c++  java
  • JavaScript 数组去重

      数组去重在面试中有时候会碰到,业务中也有的时候会用到。一般去重都是后端做的。其中的有的方法可能有问题,有更好的方式欢迎留言一起学习。

    一、利用 ES6 Set 去重

      function deweight(arr){
        return Array.from(new Set(arr))
      }
      let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
      console.log(deweight(arr));
    

    二、for循环嵌套,然后splice去重

      function deweight(arr){
        for(var i = 0; i < arr.length; i++){
          for(var j = i + 1; j < arr.length; j++){
            if(arr[i] == arr[j]){
              arr.splice(j,1);
              j--;
            }
          }
        }
        return arr
      }
      let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
      console.log(deweight(arr));
    

    三、利用 indexOf 去重

      function deweight(arr){
        if(!Array.isArray(arr)){
          console.log("type error");
          return
        }
        let array = [];
        for(var i = 0; i < arr.length; i++){
          if(array.indexOf(arr[i]) === -1){
            array.push(arr[i])
          }
        }
        return array
      }
      let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
      console.log(deweight(arr));
    

    四、利用 includes 去重

      function deweight(arr){
        if(!Array.isArray(arr)){
          console.log("type error");
          return
        }
        let array = []
        for(var i = 1; i < arr.length; i++){
          if(!array.includes(arr[i])){
            array.push(arr[i])
          }
        }
        return array
      }
      let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
      console.log(deweight(arr));
    

    五、利用 reduce + includes 去重

      function deweight(arr){
        if(!Array.isArray(arr)){
          console.log("type error");
          return
        }
        return arr.reduce((prev,cur) => prev.includes(cur)?prev:[...prev,cur],[])
      }
      let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
      console.log(deweight(arr));
    

    六、利用 Map 数据结构 去重

      function deweight(arr){
        let map = new Map();
        let array = new Array();
        for(let i = 0; i < arr.length; i++){
          if(map.has(arr[i])){
            map.set(arr[i],true)
          }else{
            map.set(arr[i],false);
            array.push(arr[i])
          }
        }
        return array
      }
      let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
      console.log(deweight(arr));
    

    七、利用 filter 去重

      function deweight(arr){
        return arr.filter(function(item,index,arr){
          return arr.indexOf(item,0) === index;
        })
      }
      let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
      console.log(deweight(arr));
    

    八、利用 hasOwnProperty 去重

      function deweight(arr){
        let obj = {};
        return arr.filter(function(item,index,arr){
          return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
        })
      }
      let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
      console.log(deweight(arr));
    
  • 相关阅读:
    22 组合电路中的竞争--冒险
    21 典型的组合电路模块(2)
    vhdl和verilog的区别
    17 TTL电路系列(2)
    树莓派Pico
    ESP8266/ESP32自动下载电路原理分析
    CH340芯片
    26. 删除排序数组中的重复项
    25. K 个一组翻转链表
    23. 合并K个排序链表
  • 原文地址:https://www.cnblogs.com/aloneer/p/14594841.html
Copyright © 2011-2022 走看看