Set简介
Set类似数组。
Set内的值都是唯一的,不会重复。
Set方法
可以使用add添加元素,支持链式操作。
let a = new Set([1, 2, 3])
a.add('Faker').add('Bang')
console.log(a) // Set(5) {1, 2, 3, "Faker", "Bang"}
可以使用 delete() 方法删除元素
let a = new Set(['Faker', 'Bengi', 'Wolf'])
a.delete('Bengi')
console.log(a) // Set(2) {"Faker", "Wolf"}
clear()清空
let a = new Set(['Faker', 'Bengi', 'Wolf'])
a.clear('Bengi')
console.log(a) // Set(0) {}
has()查找是否包含某元素
let a = new Set(['Faker', 'Bengi', 'Wolf'])
console.log(a.has('Bengi')) // true
console.log(a.has('Clid')) // false
.size 查看长度
let a = new Set(['Faker', 'Bengi', 'Wolf'])
console.log(a.size) // 3
遍历
forEach()
let a = new Set(['Faker', 'Bengi', 'Wolf'])
a.forEach(item => {
console.log(item)
// Faker
// Bengi
// Wolf
});
for of (Set的keys和values是相同的,有别于数组)
let a = new Set(['Faker', 'Bengi', 'Wolf'])
for (let item of a.values()) {
console.log(item)
// Faker
// Bengi
// Wolf
}
for (let item of a.keys()) {
console.log(item)
// Faker
// Bengi
// Wolf
}
for (let item of a.entries()) {
console.log(item[0], item[1])
// Faker Faker
// Bengi Bengi
// Wolf Wolf
}
Set的应用
数组去重
let arr = [1, 2, 2, 3, 4, 5, 2]
let s = new Set(arr)
console.log([...s]) // (5) [1, 2, 3, 4, 5]
数组混合去重
let arr_1 = [1, 2, 2, 3, 4, 5, 2]
let arr_2 = [2, 3, 4, 4, 5, 6]
let s = new Set([...arr_1, ...arr_2])
console.log([...s]) // (6) [1, 2, 3, 4, 5, 6]
最后的显示用Array.from()也可以。
两数组的交集
let arr_1 = [1, 2, 2, 3, 4, 5, 2]
let arr_2 = [2, 3, 4, 4, 5, 6]
let s1 = new Set(arr_1)
let s2 = new Set(arr_2)
let result = new Set(arr_1.filter(item => s2.has(item)))
console.log([...result]) // (4) [2, 3, 4, 5]
两数组的差集
let arr_1 = [1, 2, 2, 3, 4, 5, 2]
let arr_2 = [2, 3, 4, 4, 5, 6]
let s1 = new Set(arr_1)
let s2 = new Set(arr_2)
let result1 = new Set(arr_1.filter(item => !s2.has(item)))
let result2 = new Set(arr_2.filter(item => !s1.has(item)))
console.log([...result1, ...result2]) // (2) [1, 6]
WeakSet()
WeakSet()和Set()类似,但WeakSet()只能储存对象。
可以使用add(),delete(),has()。
WeakSet()无法遍历。
WeakSet()中的元素为弱引用。不被垃圾回收机制所考虑。