JS:数组去重的几种方式

109 阅读1分钟

见代码及其注释

function removeDup(arr){//数组去重
  let n = arr.length;
  let ans1 = arr.slice(0);
  let ans2 = arr.slice(0);
  let ans3 = [];
  let ans4 = [];
  let ans5 = [];
  let ans6 = [];
  let ans7 = [];

  //方法一:利用set
  ans1 = Array.from(new Set(ans1));

  //方法二:双重for
  for(let i = 0;i<ans2.length;i++){
    for(let j = i + 1;j<ans2.length;j++){
      ans2[i] === ans2[j] ? ans2.splice(j--,1) : 0
    }
  }

  //方法三:利用indexOf 缺陷:无法去重NaN
  for(let i = 0;i<n;i++){
    ans3.indexOf(arr[i]) == -1 ? ans3.push(arr[i]) : 0
  }

  //方法四:obj属性 缺陷:把字符串和数字相同的去掉了
  var obj = {};
  for(let i = 0;i<n;i++){
    if(!obj[arr[i]]){
      ans4.push(arr[i]);
      obj[arr[i]] = 1
    }else{
      obj[arr[i]]++
    }
  }

  //方法五:利用includes
  arr.forEach((val,idx) => {
    ans5.includes(val) ? 0 : ans5.push(val)
  })

  //方法六:利用hasOwnProperty
  var obj = {}
  arr.forEach((val,idx) => {
    if(!obj.hasOwnProperty(typeof val + val)){
      ans6.push(val);
      obj[typeof val + val] = true;
    }
  })

  //方法七:利用map
  let map = new Map()
  arr.forEach((val,idx) => {
    if(!map.has(val)){
      ans7.push(val)
      map.set(val,1)
    }
  })

  return {
    ans1 : ans1,
    ans2 : ans2,
    ans3 : ans3,
    ans4 : ans4,
    ans5 : ans5,
    ans6 : ans6,
    ans7 : ans7
  }
}