Set:一种新的数据结构
常用方法
遍历
应用场景
WeakSet
 
常用方法:
// Set的成员值一定是唯一的不重复的
let s = new Set([1, 2, 3, 2])
// 添加数据add
s.add('a')
// add可以链式操作
s.add('b').add('c')
// 删除数据delete
s.delete('b')
// 清除所有数据clear
// s.clear()
console.log(s);
// has判断是否包含某项数据
console.log(s.has('a')); // true
// size输出包含多少项数据
console.log(s.size);

  

遍历Set:
s.forEach(item => console.log(item))
for (let item of s) {
console.log(item);
}
// Set的key值和value值是一样的
for (let item of s.keys()) {}
for (let item of s.values()) {}
for (let item of s.entries()) {
console.log(item[0], item[1]);
}

  

应用场景
 
数组去重
let arr = [1, 2, 3, 4, 2, 3];
let s1 = new Set(arr)
console.log(s1);
// Set转换成数组
console.log([...s1]);
console.log(Array.from(s1));

  

数组合并去重,这里也能理解成并集
let arr1 = [1, 2, 3, 4]
let arr2 = [2, 3, 4, 5, 6]
let s2 = new Set([...arr1, ...arr2])
console.log(s2);

  

交集
let s3 = new Set(arr1)
let s4 = new Set(arr2)
let res = new Set(arr1.filter(item => s4.has(item)))
console.log(res);

  

差集:除去交集的元素
let res2 = new Set(arr1.filter(item => !s4.has(item)))
let res3 = new Set(arr2.filter(item => !s3.has(item)))
console.log(res2);
console.log(res3);
console.log([...res2, ...res3]);

  

WeakSet和Set类似,但是有以下区别。
1、WeakSet的成员只能是对象,而不能是其他类型的值
2、WeakSet中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用。所以WeakSet不能被循环遍历
let ws = new WeakSet()
const obj1 = {
name: '张三'
}
const obj2 = {
age: 18
}
ws.add(obj1)
ws.add(obj2)
// 删除的时候要是同一个内存地址的对象才可以正确删除
ws.delete(obj1)
console.log(ws);
console.log(ws.has(obj2));

  

 
 

ES6-11学习笔记--Set的更多相关文章

  1. C++11 学习笔记 std::function和bind绑定器

    C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...

  2. es6.3学习笔记

    es版本发布相当快,从1.x到2.x,再直接到5.x,6.x 索引这个词在es中有多重意思: 索引(名词):一个索引类似于传统数据库中的一个索引,用于存储关系型文档.索引的复数为indexes或ind ...

  3. es6小白学习笔记(一)

    1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...

  4. C++11学习笔记

    C++11 1.long long新类型 2.列表初始化 int t=0; int t={0}; int t(0); int t{0}; 注意:如果我们使用列表初始化有丢失信息的风险,则编译器报错 l ...

  5. linux0.11学习笔记(1)

    公布软件包包括内容: bootimage.Z - 具有美国键盘代码的压缩启动映像文件: rootimage.Z - 以1200kB 压缩的根文件系统映像文件: linux-0.11.tar.Z- 内核 ...

  6. JavaScript(ES6)学习笔记-Set和Map数据结构(一)

    一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...

  7. ES6 promise学习笔记 -- 基本用法

    ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise(function(reso ...

  8. ES6 Generator 学习笔记一

    Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度.从语法上,首先可以把它理解成,Generator 函数是一个状态机 ...

  9. C++11学习笔记(5) —— override and final (转)

    原文转自 http://blog.csdn.net/fire_lord/article/details/8540592 1.简介 C++为我们提供了继承和虚函数的重写特性. 在派生类中,重写虚函数不强 ...

  10. 802.11学习笔记1-WIFI参数含义

    研究下wifi参数的含义 #The word of "Default" must not be removed Default CountryRegion= CountryRegi ...

随机推荐

  1. Golang开源流媒体服务器(RTMP/RTSP/HLS/FLV等协议)

    一. lal 简介 lal是开源直播流媒体网络传输项目,主要由三部分组成: lalserver:流媒体转发服务器.类似于nginx-rtmp-module等服务,但支持更多的协议,提供更丰富的功能. ...

  2. DNS服务/etc/rndc.key was found解决办法

    问题: [root@localhost ~]# rndc reload rndc: neither /etc/rndc.conf nor /etc/rndc.key was found 解决办法: R ...

  3. 自己的markdown笔记

    markdown一些语法 记录自己会用的一些markdown语法,不定期更新,用的软件是hroopad,hroopad下载地址点击跳转.这个书写软件对新手还有中文用户比较友好,左边是markdown语 ...

  4. LGP3092题解

    看 DP 的时候翻到的题,发现这题的坑鸽子了一年半 这个状态感觉比较厉害,还是来记录一下吧. 首先硬币数量很少让我们想到状压,可以想出来一个十分 navie 的状态:\(dp[S][n]\) 表示用过 ...

  5. powerful number筛

    心血来潮跑来实现以下这个东西 我们应该知道杜教筛的理论是 \(f * g=h\),那么问题在于如何找 \(g\). 之前的blog应该提到过可以令 \(g(p)=-f(p)\),这样一来 \(h\) ...

  6. 面试突击32:为什么创建线程池一定要用ThreadPoolExecutor?

    在 Java 语言中,并发编程都是依靠线程池完成的,而线程池的创建方式又有很多,但从大的分类来说,线程池的创建总共分为两大类:手动方式使用 ThreadPoolExecutor 创建线程池和使用 Ex ...

  7. 017tcpflow的简单用法

    tcpflow tcpflow是服务器上经常使用的一个小程序,它能够捕获tcp的数据流,并将其存储为方便分析和调试的格式.每一条tcp流都会被存储到独立的文件中,因此,典型的tcp流将会被分别存储为进 ...

  8. OpenCv基础_一

    图片的读取和展示 import cv2 img = cv2.imread('1.jpg') cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWin ...

  9. linux内存(二)高端内存

    来此网址 https://ilinuxkernel.com/?p=1013 Linux内核地址映射模型x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访 ...

  10. Rsync反弹shell

    vulhub环境靶机 : 192.168.91.130 攻击机:kali 192.168.91.128 一.环境搭建 vulhub环境靶机环境搭建 ​ 在纯净ubuntu中部署vulhub环境: 1. ...