ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成 Set 数据结构。
let set = new Set()
let arr = [2, 1, 3, 2, 4, 5, 2, 1]
arr.forEach(item=>set.add(item))
console.log(set) // Set(5)?{2, 1, 3, 4, 5}
上面代码通过add()方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。
set 还可以接收一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
let [...arr] = new Set([1,2,1,2,1,2,3])
console.log(arr) // [1, 2, 3]
上面代码中,我们使用set实现数组去重
向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。
let set = new Set()
let a = NaN;
let b = NaN;
set.add(a)
set.add(b)
console.log(set) // Set(1)?{NaN}
上面代码中,向set实例添加了两个NaN,但是只加入了一个,这说明在set内部,NaN等于NaN
两个对象总是不相等的
let set = new Set()
let a = {};
let b = {};
set.add(a)
set.add(b)
console.log(set.size) // 2
set实例的方法分为两大类,操作方法(用于操作数据)和遍历方法(用于遍历成员)
let set = new Set()
set.add(1)
set.add(2)
console.log(set) // Set(2)?{1, 2}
set.delete(1)
console.log(set) // Set(1)?{2}
console.log(set.has(2)) // true
set.clear()
console.log(set) // Set(0)?{}
上面代码是set操作方法的实例
Array.from方法可以将set结构转化为数组
let set = new Set([1,2,3])
console.log(set) // ?{1, 2, 3}
console.log(Array.from(set)) // [1, 2, 3]
特别指出的是,set的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用set保存一个回调函数列表,调用时就能保证按照添加顺序调用
keys方法、values方法、entries方法返回的都是遍历器对象。由于set没有键名,只有键值(或者说键值和键名是同一个值),所以keys方法和values方法的行为完全一致。
let set = new Set([1,2,3])
console.log(set) // ?{1, 2, 3}
for(let item of set.values()){
console.log(item) // 1 2 3
}
for(let item of set.keys()){
console.log(item) // 1 2 3
}
for(let item of set.entries()){
console.log(item) // [1, 1] [2, 2] ?[3, 3]
}
未完。。。
原文:https://www.cnblogs.com/mengxiangji/p/10740615.html