数组去重的几个办法

不使用 set

1
2
3
4
5
6
7
function unique(array) {
let newArray = [];
array.forEach((element) => {
newArray.indexOf(element) === -1 && newArray.push(element);
});
return newArray;
}

缺点:

  • forEach 和 indexof 相当于两次循环,性能低,大量数据处理速度慢
  • 对象数组无法去重

使用 Set

1
2
3
4
function unique(array) {
let newArray = [...new Set(array)];
return newArray;
}

缺点:

  • 上面一样对象数组没办法去重,而且 Set 里面 NaN 认为是相同的,也可能造成问题

使用 Map 实现对象去重

1
2
3
4
5
6
7
8
9
10
11
var uniq = function (a) {
var map = new Map();
for (let i = 0; i < a.length; i++) {
let number = a[i]; // 1 ~ 3 if(number === undefined){continue}
if (map.has(number)) {
continue;
}
map.set(number, true);
}
return [...map.keys()];
};

测试了一下可以进行对象数组去重了,缺点是兼容性比较差


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!