类似于数组,集合实现了iterator 接口,所以可以使用 扩展运算符 和 for…of 进行遍历
是一种新的数据结构,它可以接收一个数组或者是类数组对象
Set对象是值的集合,值是惟一的
Set本身是一个构造函数,用来生成set数据结构
let sets = new Set()
Set可以接收一个数组作为参数,用来初始化
let sets = new Set([1,2])
console.log(sets);
let sets = new Set(2)
返回set结构成员数量
类似于数组长度
let sets = new Set()
sets.size;//0
添加成员 返回set结构本身
let sets = new Set()
sets.add(1).add('str').add([2,2])
let sets = new Set()
sets.add(1)
sets.add('str')
sets.add([2,2])
sets.size;//3
清空set所有成员 没有返回值
let sets = new Set()
sets.add(1)
sets.add('str')
sets.add([2,2])
sets.clear()
删除元素value 返回布尔值 表示是否删除成功
let sets = new Set()
sets.add(1).add('str').add([2,2])
sets.delete('str'); // true
sets.delete('hh'); // false
let sets = new Set()
sets.add(1)
sets.add('str')
sets.add([2,2])
let entries= sets.entries();
for(let i of entries){
console.log(i)
}
// [1, 1]
// ["str", "str"]
// [[1,2], [1,2]]
console.log(entries,sets.entries())
set结构的实例和数组一样,也有forEach方法
forEach(callback,this)
function callback(value, key, set){}
value === key 属性值, set 遍历的对象
let obj = {name:'obj'}
let sets = new Set()
sets.add(1)
sets.add('str')
sets.add([2,2])
sets.forEach(function(value, key, set){
console.log(value, key, set)
console.log(this)
},obj)
// 1 1 Set(3) {1, "str", Array(2)}
// str str Set(3) {1, "str", Array(2)}
// [2, 2] [2, 2] Set(3) {1, "str", Array(2)}
// this 指向 obj{name:'obj'}
返回一个布尔值 表示该值是否为Set的成员
let sets = new Set()
sets.add(1)
sets.add('str')
sets.has('str')//true
let sets = new Set()
sets.add(1).add('str').add([2,2])
console.log(sets.keys())
let keys= sets.keys();
for(let i of keys){
console.log(i)
}
// 1
// 'str'
// [1,2]
返回一个新Iterator对象,该对象按插入顺序包含该对象中每个元素的值
let sets = new Set()
sets.add(1).add('str').add([2,2])
console.log(sets.values())
let values = sets.values();
for(let i of values){
console.log(i)
}
// 1
// 'str'
// [1,2]
set[Symbol.iterator]()
访问遍历器iterator
let Sy = sets[Symbol.iterator]()
console.log(Sy)
let numbers = [1,1,2,3,2,1,5,8,8,96,12,undefined,null,'']
let numberSet = new Set(numbers)
console.log(numberSet)
let uniqunNumber = [...numberSet];
//[1, 2, 3, 5, 8, 96, 12, undefined, null, ""]
求重复部分
let numbers = [1,1,2,3,2,1,5]
let numbers2 = [1,1,5,2]
let res = [...new Set(numbers)].filter(item=>{
let s2 = new Set(numbers2)
return s2.has(item)
})
// let res = [...new Set(numbers)].filter(item => new Set(numbers2).has(item))
console.log(res) // [1, 2, 5]
数组合并
let numbers = [1,1,2,3,2,1,5]
let numbers2 = [1,1,5,2]
let s = new Set([...numbers,...numbers2])
[...s] // [1,2,3,5]
A有B没有
let numbers = [1,1,2,3,2,1,5]
let numbers2 = [1,1,5,2]
let res = [...new Set(numbers)].filter(item => !new Set(numbers2).has(item))
// [3]
let res2 = [...new Set(numbers2)].filter(item => !new Set(numbers).has(item))
// []