• 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));
    
  • 相关阅读:
    前端chrome浏览器调试总结
    this指南——绑定了谁?
    轮播图终极版
    一个后台项目的总结
    h5 websocket 断开重新连接
    ios手机键盘拉起之后页面不会回退的问题
    promise 的串行执行
    js中对小数的计算
    对问卷项目的优化
    禁止eslint对指定代码检测
  • 原文地址:https://www.cnblogs.com/aloneer/p/14594841.html
Copyright © 2020-2023  润新知