题目
如何实现数组去重?
假设有数组 array = [1,5,2,3,4,2,3,1,3,4]
你要写一个函数 unique,使得
unique(array) 的值为 [1,5,2,3,4]
也就是把重复的值都去掉,只保留不重复的值。
用set写
function unique(array){
return Array.from(new Set(array));
}
unique([1,5,2,3,4,2,3,1,3,4])//[1,5,2,3,4]
缺点:对象无法去重,而且这个API比较新,一些旧的浏览器可能会不支持
Map方法
unique = (arr) => {
let hashMap = new Map();
let result = new Array();
for (let i = 0; i < arr.length; i++) {
if(hashMap.has(arr[i])) { // 判断 hashMap 中是否已有该值
hashMap.set(arr[i], true); // true重复
} else { // 如果 hashMap 中没有该值,添加到新的数组中
hashMap.set(arr[i], false);
result.push(arr[i]);
}
}
return result;
}
unique([1,5,2,3,4,2,3,1,3,4])//[1,5,2,3,4]
缺点:对象无法去重;而且这个方法的API也很新,一些旧的浏览器会不支持。