ES6 传说中key和value一模一样的Set

基础用法

  • ES6 提供了新的数据结构 Set(为构造函数)。

  • 它类似于数组,但是成员的值都是唯一的,没有重复的值,可以用于去重

  • 内部判断重复的判断语句的利用的"==="

  • Set结构没有key,只有value(也可以说key和value一样)

const s = new Set();

const a = [1,22,2,1,3,4,22,3];

console.log(new Set(a)) //Set(5) {1, 22, 2, 3, 4}

console.log(new Set(‘aabbvv’)) // Set(3) {“a”, “b”, “v”}

console.log([…new Set(‘aabbvv’)].join(‘’)) // “abv”

Set的属性和方法

| 属性/方法 | 用途 |

| :-- | :-- |

| Set.prototype.constructor | 返回Set的构造函数ƒ Set() { [native code] } |

| Set.prototype.size | 返回Set实例的成员总数 |

| Set.prototype.add(value) | 添加元素,返回 Set 结构本身 |

| Set.prototype.delete(value) | 删除元素,返回一个布尔值,表示删除是否成功 |

| Set.prototype.has(value) | 判断是否为set成员,表示该值是否为Set的成员 |

| Set.prototype.clear() | 清除所有成员,没有返回值 |

| Set.prototype.keys() | 返回遍历的key值 |

| Set.prototype.values() | 返回遍历的value值 |

| Set.prototype.entries() | 返回遍历的键值对方式 |

| Set.prototype.forEach() | 使用回调函数遍历每个成员(遍历) |

遍历的应用

数组去重:

Array.from方法可以将 Set 结构转为数组:

// 1.

function dedupe(array) {

return Array.from(new Set(array));

}

// 2.

function dedupe(array){

return […new Set(array)];

}

dedupe([1, 1, 2, 3]) // [1, 2, 3]

实现数学中的交集、并集和差集:

let a = new Set([1, 2, 3]);

let b = new Set([4, 3, 2]);

// 并集

let union = new Set([…a, …b]);

// Set {1, 2, 3, 4}

// 交集

let intersect = new Set([…a].filter(x => b.has(x)));

// set {2, 3}

// 差集

let difference = new Set([…a].filter(x => !b.has(x)));

// Set {1}

回到顶部 目录

WeakSet


WeakSet与Set的区别

相同点:不重复的值的集合,都是构造函数

不同点:

  • WeakSet的成员只能是对象,不然就报错

  • WeakSet是弱引用(即垃圾回收机制不考虑 WeakSet 对该对象的引用)

语法

const ws = new WeakSet([arr]);

WeakSet可以接受一个数组或者一个类似数组的参数

// 1.

const a = [[1, 2], [3, 4]];

const ws1 = new WeakSet(a);

// WeakSet {[1, 2], [3, 4]}

// a = {0:[1,2], 1:[3,4]}

// 2.

const b = [3, 4];

const ws2 = new WeakSet(b);

// Uncaught TypeError: Invalid value used in weak set(…)

// b = {0:3, 1:4}

  • 1中a是数组有两个成员也数组,所以a的成员就赋值给了WeakSet的成员

  • 2中b就是一个数组,成员不是对象,使用报错

方法

| 方法 | 用途 |

| :-- | :-- |

| WeakSet.prototype.add(value) | 添加元素 |

| WeakSet.prototype.delete(value) | 删除元素 |

| WeakSet.prototype.has(value) | 判断是否存在该元素,返回布尔值 |

回到顶部 目录

WeakSet应用


WeakSet 没有size属性,没有办法遍历它的成员(不能遍历是因为成员都是弱引用,随时随地可能消失)

  • 是储存 DOM 节点,而不用担心这些节点从文档移除时,会引发内存泄漏

  • 完完全全实现一个构造函数

const w = new WeakSet();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值