Set 数据结构
Set 是一种 集合数据结构,它类似于数组,但与数组不同的是它没有重复值
一、创建 Set
创建一个新的集合,通过add方法添加数据
const mySet = new Set() mySet.add(1) mySet.add(2) mySet.add(2) mySet.add(3) mySet.add(4) console.log(mySet)
直接初始化集合
const mySet = new Set([1,2,2,3,4])
console.log(mySet)
上面两种代码均打印如下:
二、实例的属性和方法
- size: 返回Set实例的成员总数
console.log(mySet.size) // 返回集合的大小
- add(value): 添加某个value
mySet.add(5)
- delete(value): 删除某个值,返回一个布尔值,表示删除是否成功
mySet.delete(2)
- has(value): 返回一个布尔值,表示该值是否为Set的成员
console.log(mySet.has(2))// false
- clear: 清除所有成员,没有返回值
mySet.clear()
三、遍历
- keys(): 返回键名的遍历器
for (let i of mySet.keys()){ console.log(i) //1,2,3,4 }
- values(): 返回键值的遍历器
for (let i of mySet.values()){ console.log(i) //1,2,3,4 }
- entries(): 返回键值对的遍历器
for (let i of mySet.entries()){ console.log(i) //[1,1], [2,2],[3,3],[4,4] 键、值都相等 }
- forEach(): 遍历每个成员
// Set虽然类似数组,但没有索引值,只有具体的值。所以遍历的index和value相等 mySet.forEach((value,index)=>{ console.log(value) //1,2,3,4 console.log(index) //1,2,3,4 });
- for...of:Set内部已实现了迭代器,所以可以是用for...of
for (let value of mySet){ console.log(value) //1,2,3,4 }
四、将Set转化成数组:
- 使用扩展运算符
console.log([...mySet]) //[1,2,3,4]
- 使用Array.from()
console.log(Array.from(mySet)) //[1,2,3,4]
五、复杂数据结构去重
//复杂数据结构去重 function uni(arr){ let res = new Set() const newarr = arr.filter(item=>{ let id = JSON.stringify(item) if(res.has(id)){ return false }else{ res.add(id) return true } }) return newarr } var arr=[ 1, 'ceshi', {name:'zhanfsan'}, {name:'zhanfsan'}, {name:'lisi'}, [1,2], [3,4], [1,2], undefined, NaN, undefined, NaN ] var newarr = uni(arr) console.log(newarr)