如何实现数组去重?

99 阅读1分钟

hash

利用对象的属性不能相同的特点进行去重
缺点:因为 js 里对象的属性名只能是字符串,所以 true 和 ‘true’,会被认为是同一个。

function unique(array) {
  let Array= []
  let hash = {} // {1: true, 2: true}
  for(let i = 0; i < array.length; i++){
    if(!hash[array[i]]){
      Array.push(array[i])
      hash[array[i]] = true;
    }
  }
  return Array;
}
var array = [1,5,2,3,4,2,3,1,3,4];
console.log(unique(array))

利用ES6 Set去重(ES6中最常用)

ES6中新增了数据类型set,set的一个最大的特点就是数据不重复。Set函数可以接受一个数组(或类数组对象)作为参数来初始化,利用该特性也能做到给数组去重

优点:代码最少
缺点:兼容性、无法去掉“{}”空对象

function unique (array) {
  return Array.from(new Set(array))
}
var array = [1,5,2,3,4,2,3,1,3,4];
console.log(unique(array))

利用Map数据结构去重

创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果

function arrayNonRepeatfy(arr) {
  let map = new Map();
  let array = new Array();  // 数组用于返回结果
  for (let i = 0; i < array.length; i++) {
    if(map .has(array[i])) {  // 如果有该key值
      map .set(array[i], true); 
    } else { 
      map .set(array[i], false);   // 如果没有该key值
      array .push(array[i]);
    }
  } 
  return array ;
}
 var array = [1,5,2,3,4,2,3,1,3,4];
    console.log(unique(array))