3. 数组去重
来源:腾讯一面
题目
实现数组去重,要求掌握多种方法。
代码
js
// 数组去重,多种方法
// 腾讯一面
const arr = [1, 2, 3, 3, 4, 4, 5]
// 1. Set
let uniqueArr1 = [...new Set(arr)];
console.log(uniqueArr1);
// 2. includes
let uniqueArr2 = [];
for(const num of arr){
if(!uniqueArr2.includes(num)){
uniqueArr2.push(num);
}
}
console.log(uniqueArr2);
// 3. filter + indexOf
let uniqueArr3 = arr.filter((num,index) => arr.indexOf(num) === index);
console.log(uniqueArr3);
// 4. Map
const map = new Map();
for(const num of arr){
map.set(num, 1);
}
let uniqueArr4 = [...map.keys()];
console.log(uniqueArr4);思路
方法一:Set
利用 Set 自动去重的特性,最简洁高效。
- 时间复杂度
- 空间复杂度
方法二:includes
遍历数组,使用 includes 判断元素是否已存在于结果数组中。
- 时间复杂度
(includes 本身是 ) - 空间复杂度
方法三:filter + indexOf
使用 filter 过滤,保留首次出现的元素(indexOf 返回首次出现的索引)。
- 时间复杂度
- 空间复杂度
方法四:Map
使用 Map 存储元素,利用 Map 的 key 唯一性去重。
- 时间复杂度
- 空间复杂度
关键点
- Set 和 Map 方法性能最优,时间复杂度
- includes 和 indexOf 方法需要嵌套遍历,时间复杂度
- 实际开发中推荐使用 Set 方法