数组去重的几种方式
借助ES6中Set数据结构成员的唯一性
(注:以下内容来源于阮一峰老师的ES6入门在线文档)
ES6中Set数据结构是一个类数组结构,Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
向 Set 加入值的时候,不会发生类型转换,所以5和”5”是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。两个对象总是不等的。
再使用扩展运算符将Set转化为数组。
去重:[…new Set(array)]
借助Array.prototype.reduce()方法,先排序再去重
1 | let arr = [1,3,5,3,2,4,5]; |
使用arr.sort()排序会存在一些问题,sort()默认的排序方法是根据字符串Unicode码点,在比较之前,元素会被转化成字符串,MDN上一个排序的例子:
1 | var scores = [1, 10, 21, 2]; |
所以尽量依照目前排序元素的特点,选择合适的compareFunction参数或选取其它方法。
遍历原有数组,利用 indexOf() 将非重复的值添加到新数组中去
1 | let arr = [1,3,5,3,2,4,5]; |
建立一个哈希表
1 | let arr = [1,3,5,3,2,4,5]; |