著名面试题:
如何实现数组去重?
假设有数组 array = [1,5,2,3,4,2,3,1,3,4]
你要写一个函数 unique,使得
unique(array) 的值为 [1,5,2,3,4]
1.不使用 Set,借鉴计数排序的原理
array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
unique = (array) => {
const array1 = [];
for (let i = 0; i < array.length; i++) {
array1[array[i]] = true;
}
const result = [];
for (let k in array1) {
result.push(k);
}
return result;
};
缺点:此法只支持数字或者字符串数组,如果数组里面有对象,就会出错。
2.使用set
array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
unique = (array) => {
return [new Set(array)];
};
缺点:API 太新,旧浏览器不支持
- 使用 Map
array = [1, 5, 2, 3, 4, 2, 3, 1, 3, 4];
unique = (array) => {\
let map = new Map();\
let result = []\
for (let i = 0; i < array.length; i++) {\
if(map.has(array[i])) { // 判断 map 中是否已有该 key\
continue\
} else { // 如果 map 中没有该 key,就加入 result 中\
map.set(array[i], true);\
result.push(array[i]);\
}\
}\
return result;\
}
缺点:API 太新,旧浏览器不支持