js 数组去重有哪些方法?

32 阅读1分钟
let array = [
    {label: 1},
    {label: 2},
    {label: 1},
]
let array1 = [1,2,2,2,2,3,4,5,4,4,4,]
//双重for循环
function unique1(a, key = null) {
    let arr = JSON.parse(JSON.stringify(a))
    for (var i = 0; i < arr.length - 1; i++) {
     for (var j = i + 1; j < arr.length; j++) {
       if (key ? arr[i][key] === arr[j][key] : arr[i] == arr[j]) {
         arr.splice(j, 1);
         j--;
       }
     }
   }
   return arr;
}
// for some
function unique2(a, key = null){
    let arr = JSON.parse(JSON.stringify(a))
    let newArr = [];
     for (let i = 0; i < arr.length; i++) {
       if (!newArr.some(j => (key ? j[key] : j) === (key ? arr[i][key] : arr[i]))) {
         newArr.push(arr[i]);
       }
    }
    return newArr
}
//set
function unique3(a, key = null){
    let arr = JSON.parse(JSON.stringify(a))
  
    let newArr = [];
  if(key){
    
  }else{
    newArr = [...new Set(arr)]
  }
    return newArr
}
//map
function unique4(a, key = null){
    let arr = JSON.parse(JSON.stringify(a))
  const map = new Map();
  const newArr = arr.filter(i => !map.has(key ? i[key] :i) && map.set(key ? i[key] : i, 1));
  return newArr
}
//hasOwnProperty
function unique5(a, key) {
    let arr = JSON.parse(JSON.stringify(a))
    var obj = {};
    return arr.filter(function(item, index, arr) {
      return obj.hasOwnProperty(typeof (key ? item[key] : item) + (key ? item[key] : item)) ? false : (obj[typeof (key ? item[key] : item) + (key ? item[key] : item)] = true);
    });
}

// console.log(unique1(array, 'label'))
// console.log(unique2(array, 'label'))
// console.log(unique2(array1))
// console.log(unique4(array1, ))
// console.log(unique5(array, 'label'))