![c8c0e01f89c7ba4549859158f41b5136.png](https://i-blog.csdnimg.cn/blog_migrate/52503cc268826b11ee2782970f6406aa.png)
数组去重算是面试题里常见的考点了,之前在 Medium 上看到一篇文章用三种方法实现数组去重的,感觉十分简洁。主要用到的是 Set, Array.filter, Array.reduce。可能第一种大家都知道,方方也讲过基数排序来去重,但是能用 filter, reduce 写成这样的真的很简洁呀。
使用 Set
let array = [1, 1, 2, 3, 3, 3, 3, 4, 4, 5, 6, 6, 7]
array = array.from(new Set(array))
console.log(array)
使用 filter
这个方法是每个元素都去看 index 是否和第一次出现该元素的 index 一样,如果是一样的就不一样的就过滤掉(因为这是第二次出现了),否则不过滤(是第一次出现)。
let array = [1, 1, 2, 3, 3, 3, 3, 4, 4, 5, 6, 6, 7]
array = array.filter((el, index) => array.indexOf(el) === index)
console.log(array)
使用 reduce
这种比较难以一眼看懂,其实本质上就是创建一个临时数组,遍历原数组的时候去判断当前元素是否已经存在于临时数组里了,如果存在那么不加入,否则加入。
let array = [1, 1, 2, 3, 3, 3, 3, 4, 4, 5, 6, 6, 7]
array = array.reduce((unique, el) => unique.includes(el) ? unique : [...unique, el], [])
console.log(array)