数组去重
利用set数据结构成员唯一方法
const unique = (array) => [...new Set(array)]
const unique2 = (array) => {
return Array.from(new Set(array))
}
统计重复次数
let arr = [1, 1, 2, 4, 5, 5, 5, 5, 7, 5, 7, 6, 7, 7, 10]
const fun = (arr) => {
// 先将数组转化为Set的数据类型,然后再转回Array类型
let dedupeArr = [...new Set(arr)]
let count = 0
let obj = {}
dedupeArr.forEach(i => {
count = 0
arr.forEach(j => {
if (i === j) {
count++
}
})
obj[i] = count // obj键名为i(对应的数组元素),值为count(出现次数)
})
return obj
}
去除字符串中的重复字符
const fun = (str) => [...new Set(str)].join('')
主要知识点
1、Set本身是一个构造函数,用来生成Set数据结构。
2、扩展运算符(...)内部使用for... of循环,所以也可以用于Set结构。
扩展:
Set实例的属性和方法
属性:
Set.prototype.constructor:构造函数,默认就是Set函数。
Set.prototype.size:返回Set实例的成员总数。
方法:
1、 操作方法
add(value):添加某个值,返回Set结构本身。
delete(value):删除某个值,返回一个布尔值表示是否删除成功。
has(value):判断某个值是否为Set的成员,返回一个布尔值。
clear():清除所有成员,没有返回值
2、遍历方法
keys():返回键名的遍历器。
value():返回键值的遍历器。
entries():返回键值对的遍历器。
forEach():使用回调函数遍历每个成员。
使用:
由于Set结构没有键名,只有键值(或者说键名和键值是同一个值),所以key方法和value方法的行为完全一致。
for (let i of set.keys()) {
// set.values(),set.entries()同理,只是entries返回的是键值相同的键值对
console.log(i)
}
特别说明:
Set的遍历顺序就是插入顺序。这个特性可以保证Set保存一个回调函数列表,调用> 时就是按照添加的顺序调用。
扩展2:
WeakSet
WeakSet结构与Set类似,也是不重复的值的集合。但是,它与Set有两个区别。
首先,WeakSet的成员只能是对象,而不能是其他类型的值。
其次,WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中。这个特点意味着,无法引用WeakSet的成员,因此WeakSet是不可遍历的。
因此WeakSet只有3个方法:add, delete, has