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. 微服务入门二:SpringCloud(版本Hoxton SR6)

    一.什么是SpringCloud 1.官方定义 1)官方定义:springcloud为开发人员提供了在分布式系统中快速构建一些通用模式的工具(例如配置管理.服务发现.断路器.智能路由.微代理.控制总线 ...

  2. es-kibana基本使用

  3. 0x02 TeamViewer日志溯源

    1.环境部署 1.安装ubuntu_x64的deb安装包 2.打开TeamViewer 2.日志目录 1.通过图形应用找到日志文件 2.通过命令定位日志文件 find / -name "Te ...

  4. Kotlin笔记小结(For Java Developer)

    这篇文章为kotlin学习记录,主要针对的是自己的知识盲区,不适用于新手. 文中所有demo均来自于kotlin官网 类型 整形 Type Size (bits) Min value Max valu ...

  5. 03 Java的数据类型分为两大类 类型转换 八大基本类型

    数据类型 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用 Java的数据类型分为两大类 基本类型(primitive type) 数值类型 整数类型 byte占1个字节范围: ...

  6. Springboot项目 配置数据库连接属性后,启动项目报错

    Springboot项目 配置数据库连接属性后,启动项目报错,错误如下: 错误原因分析: 1.连接信息配置错误 当使用properties为配置文件时,如图所示,上面的 spring.datasour ...

  7. margin 塌陷bug 触发bfc

    1.bfc block format context 2.如何触发一个盒子的bfc position:absolute; display: inline-block float:left/right; ...

  8. 【Vulnhub靶场】RED: 1

    环境准备 下载靶机导入到vmware 但是获取不到地址,可以根据我博客里的方法修改网卡来获取IP地址 信息收集 我们改好网卡之后,我们使用arp-scan命令来探测靶机的IP地址 靶机IP地址为:19 ...

  9. spring——整合Mybatis

    一.Mybatis整合spring 步骤: 导入相关jar包 junit mybatis mysql数据库 spring-webmvc aop织入 mybatis-spring spring-jdbc ...

  10. 【公告】淘宝 npm 域名即将切换 && npmmirror 重构升级

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 前言 本文将包括两部分内容: 淘宝 npm 域名即将停止解析 npmmirror 镜像站大重构升级 原淘宝 npm 域名即将停止解析 正如在< ...