数组去重的几种实现方案

2,653 阅读1分钟

数组去重是业务开发中可能经常遇到的场景,本文总结了数据去重的几种实现思路。

1.借助Set

/**
 * 使用Map
 *  
*/
const arr = [12,34,565,12,34,1,3,1]
// const newArr = [...new Set(arr)] 
const newArr = Array.from(new Set(arr))

console.log('newArr',newArr);

案例效果:

2.常规操作


/**
 * 简单实现
 */
const arr = [12,34,565,12,34,1,3,1]
const newArray = [];
arr.forEach(item => {
  if(newArray.indexOf(item) === -1){
    newArray.push(item)
  }
});
console.log('newArray', newArray)

案例效果:

3.借助对象

/**
 * 借助对象实现
 */
const arr = [12,34,565,12,34,1,3,1]
const obj = {};
for (let index = 0; index < arr.length; index++) {
  const item = arr[index];
  if(obj[item] === undefined){
    obj[item] = item;
  }else{
    arr.splice(index, 1);
    index--;
  }
}

console.log('借助对象实现', arr);

案例效果:

4.排序并借助正则能力

/**
 * 先排序 相邻比较
 */
const arr = [12,34,565,12,34,1,3,1]
const sortArr = arr.sort((a, b)=> a-b)
console.log('sortArr', sortArr);
const sortArrStr = sortArr.join('@') + '@';
console.log('sortArrStr', sortArrStr);

const reg = /(\d+@)\1*/g;
const newArr = [];

sortArrStr.replace(reg, (val, group)=>{
  console.log('val', val);
  console.log('group', group);

  newArr.push(parseInt(group))

})
console.log('newArr', newArr);

实现效果:

5.利用filter和indexOf巧妙过滤

/** 
 * 利用filter, 设计很巧妙 时间复杂度也是O(n^2)
 */
const arr = [12,34,565,12,34,1,3,1]
const result = arr.filter((item, index)=>{
  return arr.indexOf(item) === index;
})
console.log('result', result);

实现效果:

总结

本文总结了借助Set、常规操作、借助对象、排序并借助正则能力、filter等几种途径来实现数组去重。

如果对你有帮助,欢迎给作者点赞加关注哈哈~