在开发中,数组去重是一个常见的需求,传统的实现方式是通过循环遍历,使用 indexOf 或者 includes 等方法来判断元素是否存在,然后再进行剔除重复元素的操作,但是这种方式性能较慢,如果数组较大,会耗费大量的时间。随着 ECMAScript 2016 新增了 Set 集合,通过使用 Set 可以优化数组的去重操作,下面我们来看一下具体的实现方法。
Set 集合
Set 集合是 ECMAScript 中的一种新的数据结构,它是一组无序且唯一的元素集合,其中每个元素都是唯一的,它可以用来存储任何类型的数据,包括原始值和引用类型。
在使用 Set 集合时,不需要考虑数组的顺序,只需要添加每个不同的元素,Set 集合会自动去除重复的元素。因为 Set 集合只存储唯一的值,所以它非常适合进行去重操作。
使用 Set 集合进行数组去重
在 ECMAScript 2016 之前的版本中,我们可以使用 indexOf 或者 includes 方法来进行数组去重。下面是一种最基本的实现方式:
-- -------------------- ---- ------- -------- ----------- - --- ------ - --- ------- - - -- - - ----------- ---- - ------------------------- --- --- - -------------------- - - ------ ------- -
在 ECMAScript 2016 中,我们可以通过 Set 集合来优化该实现方式,具体如下:
function unique(arr) { return Array.from(new Set(arr)); }
在上面的实现方式中,我们首先创建一个 Set 集合,将数组作为参数传递给 Set,Set 会自动查找并去除重复的元素。最后将 Set 集合转换为数组返回即可。
除了使用 Array.from 方法之外,还可以使用扩展操作符 ... 来将 Set 集合转换为数组:
function unique(arr) { return [...new Set(arr)]; }
性能比较
为了比较使用 Set 集合和传统循环实现方式的性能差异,我们编写以下测试用例:
-- -------------------- ---- ------- --- --- - --- ------- - - -- - - ------ ---- - --------------------------------- - -------- - ------------------------ --- ---- - ------------- --------------------------- ------------------------ --- ---- - ------------- --------------------------- ----------------- --------- ------------- ----------------- --------- -------------
其中 unique1 和 unique2 分别代表了使用传统循环和 Set 集合两种方式进行数组去重。在测试中,我们模拟了一个包含 10000 个元素的数组,并对两种方法进行了计时,最后打印了数组去重的结果。
测试结果如下:
unique1: 24.958ms unique2: 0.337ms arr1 length: 6373 arr2 length: 6373
从测试结果可以看出,在数组较大的情况下,使用 Set 集合进行数组去重的时间明显比使用传统循环方式短。
总结
使用 Set 集合优化数组去重操作是 ECMAScript 2016 中的新特性,其性能比传统实现方式更为优秀,特别是在数组较大的情况下。在实际开发中,我们可以使用该方式来进行数组去重操作。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e7344af6b2d6eab32a5354