数组去重是面试经常会遇到的问题,解决的方案有很多,本篇着重通过es6提供的新的数据结构来解决。

  • Map对象解决去重
  • Set对象解决去重

Map对象解决去重

Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

Map对象

方法 描述
clear 删除所有的键/值对,没有返回值
delete 删除某个键,返回true。如果删除失败,返回false。
forEach 对每个元素执行指定操作。
get 返回Map对象key相对应的value值。
has 返回一个布尔值,表示某个键是否在当前Map对象之中。
set 给Map对象设置key/value键/值对。

数组去重

1
2
3
4
function unique(arr) {
const res = new Map();
return arr.filter((a) => !res.has(a) && res.set(a, 1))
}

Array.filter()

创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。

Set对象解决去重

Set对象是值的集合,元素只会出现一次,即Set中的元素是唯一的.
通过Set()创建的是一个对象,可以使用点语法(…)或者是Array.from将其转化为数组,然后既可以使用数组处理函数了。

Set对象

语法
new Set([iterable])
参数
iterable,如果传递一个可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等),它的所有元素将被添加到新的 Set中。如果不指定此参数或其值为null,则新的 Set为空。

数组去重

1
2
3
function unique(arr) {
return Array.from(new Set(arr))
}

Array.from()

用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。