ES6 之前的数组去重
在ES6之前的数组去重,我们一般会对数组进行双重循环取值比较操作。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// 之前的数组去重
let beforeDisRepeat = (arr) => {
let tempArr = [arr[0]]
wrapper:
for(itemOld of arr){
for(itemNew of tempArr) {
if(itemOld === itemNew){ continue wrapper }
}
tempArr.push(itemOld)
}
return tempArr
}
tip: wrapper是一个label,当两个取值相等,则无须进行这一次的后续循环取值操作。
直接continue到外层循环。 for...of...属于ES6的特性,在这里用来取代for( ; ; )
// 由于NaN不等于自身,如果数组中存在多个NaN的情况下,仍然不能去除。
// 若要去除的话,可以利用isNaN()函数进行判定。不过代码略显累赘。
利用ES6的新特性Set数据结构
1 | let disRepeat = (arr) => { |
Set数据结构介绍
- Set数据结构类似于数组,但是成员值都是唯一的。
- 向Set中加入值的时候set.add(x),不会发生类型转换。因此 ‘1’与 1并不相等。
- Set本身是一个构造函数,接受一个数组或其他具有iterable接口的数据结构作为参数,用以初始化。
Set结构实例所具有的属性
- Set.prototype.constructor : 构造函数原型,默认就是Set
- Set.prototype.size : 返回Set实例的成员总数,通Array.length
Set操作方法
- add() : 添加某个值,返回set实例本身
- delete() : 删除某个值, 返回一个boolean,表示是否删除成功
- has() : 返回一个boolean,表示该值是否是该Set实例的成员
- clear() : 清除所有成员, 无返回值。
Set遍历方法
- keys() : 返回键名
- values() : 返回键值
- entries() : 返回键值对
- forEach() : 使用回调函数遍历每一个成员