数组去重

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组去重相关的知识,希望对你有一定的参考价值。

参考技术A

数组去重是一个经常会用到的方法,我写了一个测试模板,测试一下常见的数据去重的方法的性能

测试模板

1、Array.filter() + indexOf
方法思路:将两个数组拼接为一个数组,然后使用 ES6 中的 Array.filter() 遍历数组,并结合 indexOf 来排除重复项

2、双重 for 循环
方法思路:外层循环遍历元素,内层循环检查是否重复,当有重复值的时候,可以使用 push(),也可以使用 splice()

3、for...of + includes()
方法思路:双重for循环的升级版,外层用 for...of 语句替换 for 循环,把内层循环改为 includes()。先创建一个空数组,当 includes() 返回 false 的时候,就将该元素 push 到空数组中 。类似的,还可以用 indexOf() 来替代 includes()

4、Array.sort()
方法思路:首先使用 sort() 将数组进行排序,然后比较相邻元素是否相等,从而排除重复项

5、new Set()
ES6 新增了 Set 这一数据结构,类似于数组,但Set 的成员具有唯一性

6、for...of + Object
方法思路:首先创建一个空对象,然后用 for 循环遍历,利用对象的属性不会重复这一特性,校验数组元素是否重复

测试结果一目了然,几种方法的性能 6>5>4>3>1>2

数组对象去重

参考技术A 1.Set

set是ES6中引入的新的数据类型。set只允许存储不重复的值,所以当你放入一个数组,它会自动去掉重复的值。

当然,你也可以使用Array.form来将set转回数组

2.map

3.Filter

先说说这两个方法:indexOf()和filter()
-indexOf
从一个数组中返回给定元素第一次出现的索引

-filter
filter()方法通过给定的条件(一个函数)来返回一个新的数组。换句话说,如果轮到的这个元素进入了条件函数后结果为true,那么它将被加入到过滤后的新数组中,反之则不会加入到结果数组中。

重复的元素就是那些index和indexOf不同的元素,说的再简单点,就是所有重复元素只取第一次出现的那个,后来出现的丢弃。

那如何得到重复的元素呢?将上面的条件反一反就可以啦

4.Reduce
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce用来检查最终结果是否已经包含这个item。如果不包含,那么将它放入最终结果,如果已经包含,则丢弃(或者说跳过)这个item。

5.利用for嵌套for,然后splice去重

1.利用对象访问属性的方法,判断对象中是否存在key

2.reduce

3.map

以上是关于数组去重的主要内容,如果未能解决你的问题,请参考以下文章

js数组如何去重?

数组去重三种方法

对象数组去重

Set 数组去重

js中数组去重方法总结

ES6 数组内对象去重