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));
原文地址:https://www.cnblogs.com/aloneer/p/14594841.html