一种新的数据结构,Set本身是一个构造函数,用来生成Set数据结构。类似于数组,但是成员是唯一的,没有重复

1. 使用add为Set添加属性
const aaa = new Set()
[1, undefined, undefined, 2, null, 2, 3, 4, 4].forEach(x => aaa.add(x))
for(let i of aaa){
    console.log(i)  // 1, undefined, 2, null, 3, 4
}

2. 直接通过传参生成Set
const set = new Set([1, undefined, undefined, 2, null, 2, 3, 4, 4])
// Set(6) {1, undefined, 2, null, 3, …}

3. 转成真正的数组
Array.from(set)
// [1, undefined, 2, null, 3, 4]
[...set]
// [1, undefined, 2, null, 3, 4]

4. 属性
set.size
// 6

5. 字符串去重
[...new Set('abbacc')]
// ["a", "b", "c"]

6. NaN 认为是同一个只添加一次
set.add(NaN)
set.add(NaN)
set.size // 7

7. 空对象 当作不同 可重复添加
set.add({})
set.add({})
set.size // 9

属性和方法

1.add

2.size

3.has
set.has(3)          // true

4.delete
set.delete(NaN)    // true

5.clear            
set.clear()        // undefined
set                // Set(0) {}

6.keys
set.keys()
// SetIterator {111, 222}
[...set.keys()]
// [111, 222]

7.values
set.values()
// SetIterator {111, 222}

8.entries
[...set.entries()]
// [[111, 111], [222, 222]]

9.forEach
set.forEach((item, value) => console.log(item, value))
// 111 111
// 222 222

使用

  • 并集
let a = new Set([1, 2, 3])
let b = new Set([2, 3, 4])

let c = new Set([...a], [...b])
// Set(4) {1, 2, 3, 4}
  • 交集
let d = new Set([...a].filter(x => b.has(x)))
// Set(2) {2, 3}
  • 差集
let e = new Set([...a].filter(x => !b.has(x)))
// Set(1) {1}

改变原有set结构

  • ...扩展运算符
a = new Set([...a].map(x => x * 2))
// Set(3) {2, 4, 6}
  • Array.from
a = new Set(Array.from(a, x => x * 10))
// Set(3) {20, 40, 60}

results matching ""

    No results matching ""