数组去重的方法总结

142 阅读1分钟

1.双重for循环 + splice()方法:

思路:第一层循环,所有数据,第二层循环,从第一层循环的下标+1开始,向后循环,
遇到重复的选项,则直接用splice删除相应的选项,最终返回去重后的数组
function unique(arr){
  for(let i = 0 ; i < arr.length ; i++){
    for(let j = i+1 ; j < arr.length ; j++){
      if(arr[i] === arr[j]){
        arr.splice(j,1);
        j--;
      }
    }
  }
  return arr
}
a = ['1','2','3','8','3','2','4','2'];
console.log(unique(a)); //['1', '2', '3', '8', '4']    

2.单循环+indexof

思路:新建一个数组 ,循环原数组,判断原数组的每项是否在新数组中已经存在,不存在则推入新数组
function unique(arr){
  let newArr = [];
  for(let i = 0 ; i < arr.length ; i++){
    if(newArr.indexOf(arr[i]) == -1){
        newArr.push(arr[i])
    }
  }
  return newArr;
}    
a = ['1','2','3','8','3','2','4','20','10','8'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']

3.利用对象属性名不能重复 + 新数组

思路:利用对象属性是否存在的特性,如果没有该属性则存入新数组。
function unique(arr){
  let obj = {}
  let newArr = [];
  for(let i = 0 ; i < arr.length ; i++){
    if(!obj[arr[i]]){
      obj[arr[i]] = '添加该属性';
      newArr.push(arr[i]);
    }
  }
  return newArr;
}    
a = ['1','2','3','8','3','2','4','20','10','8'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']

4.使用ES6的 Set方法 (new Set())

思路:ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
function unique(arr){
  return [...new Set(arr)];
  或者
  return Array.from(new Set(arr));
}    
a = ['1','2','3','8','3','2','4','20','10','8'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']

5.filter方法 + indexOf

function unique(arr){
  let newArr = [];
  arr.filter((item,index) => {
    if(arr.indexOf(item) === index){
      newArr.push(item)
    }
  })
  return newArr
}    
a = ['1','2','3','4','20','10','8','10','2'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']

6.reduce方法去重

第一种方式:
function unique(arr){
   return arr.reduce((pre,cur) => {
            if(!pre.includes(cur)){
              return pre.concat(cur);
            }else{
              return pre;
            }
          },[]);
}    
a = ['1','2','3','4','20','10','8','10','2'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']

第二种方式:
function unique(arr){    
  let obj = {}
  let arr1 = arr.reduce((pre, cur) => {
      if(obj[cur]) {
          return pre
      }else {
        obj[cur] = '对象添加属性'
        pre.push(cur)
        return pre
      }
      },[])
}    
a = ['1','2','3','4','20','10','8','10','2'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']