题解 | 数组去重
数组去重
https://www.nowcoder.com/practice/7a26729a75ca4e5db49ea059b01305c9
const _deleteRepeat = array=>{
return Array.from(new Set(array));
}
ES6箭头函数
- 语法:
- const functionName = parameter => { 函数体 }
- 特性:
- 简化函数声明,代替传统 function 关键字
- 自动绑定词法作用域的 this
- 适合简短的函数定义,提高代码可读性
Set数据结构(ES6)
- 定义:
- new Set([iterable]),创建一个值唯一的集合
- 核心特性
- 所有值都是唯一的,自动去重
- 支持各种数据类型(基本类型+引用类型)
- 按引用地址对引用类型去重
- 常用方法:add() , delete() , has() , clear()
- 应用场景:数组去重、数据唯一性验证、集合运算
Array.from()方法(ES6新增)
- 语法:
- Array.from(arrayLike [ , mapFn[ , thisArg ] ])
- 功能:将类数组对象或可迭代对象转换为真正的数组
- 适用对象:
- Set,Map等可迭代对象
- DOM NodeList集合
- 字符串
- 带有length属性的对象
- 应用场景:集合转数组,类数组转数组,字符串转数组
数组去重实现
- 核心原理:利用Set数据结构的唯一性特性
- 实现方式:
- Array.from(new Set(array))
- [...new Set(array)]
- 性能优势:时间复杂度为O(n),比传统双重循环效率更高
- 局限性:引用类型按地址去重而不是值比较
const 关键字
- 作用:声明只读常量,值不可重新赋值
- 特性
- 块级作用域
- 必须初始化
- 常量引用不可变,但引用的对象/数组内容可变
- 应用场景:声明函数,配置项,固定常量
代码优化与拓展
const _deleteRepeat = array =>{
if(!Array.isArray(array)){
throw new Error('参数必须是数组');
}
return Array.from(new Set(array));
}
const deepDeleteRepeat = array => {
const seen = new Map();
return array.filter(item => {
const key = typeof iter === 'object' ? JSON.stringify(item) : item;
return !seen.has(key) && seen.set(key,true);
});
}
查看8道真题和解析