ES6中的Set集合与Map映射

news2024/10/6 12:24:42

文章目录

  • 一、Set集合
    • 1.Set的基本使用
    • 2.Set的常见方法
    • 3.WeakSet使用
    • 4.WeakSet的应用
  • 二、Map映射
    • 1.Map的基本使用
    • 2.Map的常见方法
    • 3.WeakMap使用
    • 4.WeakMap的应用
  • 三、ES6的其它知识点说明

一、Set集合

1.Set的基本使用

在ES6之前,我们存储数据的结构主要有两种:数组、对象。

在ES6中新增了另外两种数据结构:SetMap,以及它们的另外形式WeakSetWeakMap

Set是一个新增的数据结构,可以用来保存数据,类似于数组,但是和数组的区别是元素不能重复

创建Set我们需要通过Set构造函数(暂时没有字面量创建的方式):

const s1 = new Set()
const arr = [3, 45, 3]
const s2 = new Set(arr)
console.log(s2)// 3, 45

我们可以发现Set中存放的元素是不会重复的,那么Set有一个非常常用的功能就是给数组去重

const arr1 = [3, 4, 6]
const s3 = new Set(arr1)
const arr2 = [...s3]
const srr3 = Array.from(s3)

2.Set的常见方法

Set常见的属性:

  • size:返回Set中元素的个数;

Set常用的方法:

  • add(value):添加某个元素,返回Set对象本身;
  • delete(value):从set中删除和这个值相等的元素,返回boolean类型;
  • has(value):判断set中是否存在某个元素,返回boolean类型;
  • clear():清空set中所有的元素,没有返回值;
  • forEach(callback, [, thisArg]):通过forEach遍历set;

另外Set是支持for-of的遍历的

// 1.创建Set
const set = new Set()
console.log(set)

// 2.添加元素
set.add(10)
set.add(22)
set.add(35)
set.add(22)
console.log(set)

const info = {}
const obj = {name: "obj"}
set.add(info)
set.add(obj)
set.add(obj)
console.log(set)

// 3.应用场景: 数组的去重
const names = ["abc", "cba", "nba", "cba", "nba"]
// const newNames = []
// for (const item of names) {
//   if (!newNames.includes(item)) {
//     newNames.push(item)
//   }
// }
// console.log(newNames)
const newNamesSet = new Set(names)
const newNames = Array.from(newNamesSet)
console.log(newNames)

// 4.Set的其他属性和方法
// 属性
console.log(set.size)
// 方法
// 4.1. add方法
set.add(100)
console.log(set)
// 4.2. delete方法
set.delete(obj)
console.log(set)
// 4.3. has方法
console.log(set.has(info))
// 4.4. clear方法
// set.clear()
// console.log(set)
// 4.5. forEach
set.forEach(item => console.log(item))

// 5.set支持for...of
for (const item of set) {
    console.log(item)
}

3.WeakSet使用

和Set类似的另外一个数据结构称之为WeakSet,也是内部元素不能重复的数据结构。

那么和Set有什么区别呢?

  • 区别一:WeakSet中只能存放对象类型,不能存放基本数据类型
  • 区别二:WeakSet对元素的引用是弱引用,如果没有其他引用对某个对象进行引用,那么GC可以对该对象进行回收;

WeakSet常见的方法:

  • add(value):添加某个元素,返回WeakSet对象本身;
  • delete(value):从WeakSet中删除和这个值相等的元素,返回boolean类型;
  • has(value):判断WeakSet中是否存在某个元素,返回boolean类型;

4.WeakSet的应用

注意:WeakSet不能遍历

  • 因为WeakSet只是对对象的弱引用,如果我们遍历获取到其中的元素,那么有可能造成对象不能正常的销毁。

  • 所以存储到WeakSet中的对象是没办法获取的;

那么这个东西有什么用呢?

  • 事实上这个问题并不好回答,我们来使用一个Stack Overflow上的答案;
// 3.WeakSet的应用
const pWeakSet = new WeakSet()
class Person {
    constructor() {
        pWeakSet.add(this)
    }

    running() {
        if (!pWeakSet.has(this)) {
            console.log("Type error: 调用的方式不对")
            return
        }
        console.log("running~")
    }
}

let p = new Person()
// p = null
p.running()
const runFn = p.running
runFn()
const obj = { run: runFn }
obj.run()

二、Map映射

1.Map的基本使用

另外一个新增的数据结构是Map,用于存储映射关系

但是我们可能会想,在之前我们可以使用对象来存储映射关系,他们有什么区别呢?

事实上我们对象存储映射关系只能用字符串(ES6新增了Symbol)作为属性名(key);

某些情况下我们可能希望通过其他类型作为key,比如对象,这个时候会自动将对象转成字符串来作为key;

那么我们就可以使用Map:

const info = { name: "why" }
const info2 = { age: 18 }

// 1.对象类型的局限性: 不可以使用复杂类型作为key
// const obj = {
//   address: "北京市",
//   [info]: "哈哈哈",
//   [info2]: "呵呵呵"
// }
// console.log(obj)

// 2.Map映射类型
const map = new Map()
map.set(info, "aaaa")
map.set(info2, "bbbb")
console.log(map)

// 3.Map的常见属性和方法
// console.log(map.size)
// 3.1. set方法, 设置内容
map.set(info, "cccc")
console.log(map)
// 3.2. get方法, 获取内容
// console.log(map.get(info))
// 3.3. delete方法, 删除内容
// map.delete(info)
// console.log(map)
// 3.4. has方法, 判断内容
// console.log(map.has(info2))
// 3.5. clear方法, 清空内容
// map.clear()
// console.log(map)
// 3.6. forEach方法
// map.forEach(item => console.log(item))

// 4.for...of遍历
for (const item of map) {
    const [key, value] = item
    console.log(key, value)
}

2.Map的常见方法

Map常见的属性:

  • size:返回Map中元素的个数;

Map常见的方法:

  • set(key, value):在Map中添加key、value,并且返回整个Map对象;
  • get(key):根据key获取Map中的value;
  • has(key):判断是否包括某一个key,返回Boolean类型;
  • delete(key):根据key删除一个键值对,返回Boolean类型;
  • clear():清空所有的元素;
  • forEach(callback, [, thisArg]):通过forEach遍历Map;

Map也可以通过for-of进行遍历。

3.WeakMap使用

和Map类型的另外一个数据结构称之为WeakMap,也是以键值对的形式存在的。

那么和Map有什么区别呢?

  • 区别一:WeakMap的key只能使用对象,不接受其他的类型作为key;
  • 区别二:WeakMap的key对对象想的引用是弱引用,如果没有其他引用引用这个对象,那么GC可以回收该对象;

WeakMap常见的方法有四个:

  • set(key, value):在Map中添加key、value,并且返回整个Map对象;
  • get(key):根据key获取Map中的value;
  • has(key):判断是否包括某一个key,返回Boolean类型;
  • delete(key):根据key删除一个键值对,返回Boolean类型;
let obj1 = { name: "why" }
let obj2 = { name: "kobe" }

// 1.WeakMap的基本使用
const weakMap = new WeakMap()
// weakMap.set(123, "aaa")
weakMap.set(obj1, "aaa")
weakMap.set(obj2, "bbb")

obj1 = null
obj2 = null

4.WeakMap的应用

注意:WeakMap也是不能遍历的

  • 没有forEach方法,也不支持通过for-of的方式进行遍历;

那么我们的WeakMap有什么作用呢?(后续专门讲解)

vue的响应式源码

在这里插入图片描述

三、ES6的其它知识点说明

事实上ES6(ES2015)是一次非常大的版本更新,所以里面重要的特性非常多:

除了前面讲到的特性外还有很多其他特性;

1.ProxyReflect

  • 我们会在后续专门进行学习。

  • 并且会利用Proxy、Reflect来讲解Vue3的响应式原理;

2.Promise

  • 用于处理异步的解决方案,后续会详细学习;

  • 并且会学习如何手写Promise;

3.ES Module模块化开发:

  • 从ES6开发,JavaScript可以进行原生的模块化开发;
  • 这部分内容会在工程化部分学习;
  • 包括其他模块化方案:CommonJS、AMD、CMD等方案;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1124255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修炼k8s+flink+hdfs+dlink(六:学习k8s-pod)

一:增(创建)。 直接进行创建。 kubectl run nginx --imagenginx使用yaml清单方式进行创建。 直接创建方式,并建立pod。 kubectl create deployment my-nginx-deployment --imagenginx:latest 先创建employment,不…

word怎么生成目录?3个技巧,教你快速生成目录

在撰写长篇文档或报告时,一个清晰的目录是必不可少的。微软word提供了多种方法来自动生成目录,从而帮助您的读者更轻松地导航和理解文档的结构。本文将介绍word怎么生成目录的3种方法,以详细解释如何在word文档中创建目录。 方法1&#xff1a…

Shell动态条进度

代码: #!/bin/bashfunction dongtai(){ i0 bar index0 arr( "|" "/" "-" "\\" )while [ $i -le 100 ] dolet indexindex%4printf "[]准备开始:[%-100s][%d%%][\e[43;46;1m%c\e[0m]\r" "$bar" "$…

GaussDB SQL基本语法示例-CASE表达式

目录 一、前言 二、CASE Expression(CASE表达式)介绍 三、GaussDB数据库中的简单CASE表达式 1、基本概念 2、基本语法 3、示例 四、GaussDB数据库中的搜索CASE表达式 1、基本概念 2、基本语法 3、示例 五、小结 一、前言 SQL是用于访问和处理…

谷歌年薪100万+的测试猿怎么写 python 代码?

谷歌员工怎么写 python 代码? 谷歌内部的 python 代码规范 熟悉 python 一般都会努力遵循 pep8 规范,也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言,而是让大家遵守同一套规则,节省…

如何使用 VuePress 搭建博客网站并 Vercel 部署

先来看一下网站截图: 快速上手 1.创建并进入一个新目录 mkdir vuepress-starter && cd vuepress-starter2.使用你喜欢的包管理器进行初始化 yarn init # npm init3.将 VuePress 安装为本地依赖 yarn add -D vuepress # npm install -D vuepress4.创建你…

react 中setState 的三种写法

目录 1:使用对象形式的setState: 2:使用函数形式的setState: 3:使用回调函数: 1:使用对象形式的setState: this.setState({ count: 0 });2:使用函数形式的setState: this.setSt…

演讲回顾 | 龙智专家分享“支撑、共享与安全:芯片开发中的数字资产管理”

近日,龙智亮相D&R IP-SoC China 2023 Day,呈现集成了Perforce与Atlassian产品的芯片开发解决方案,助力企业更好、更快地进行芯片开发。 龙智资深顾问、技术支持部门负责人李培在展会现场带来了主题为《支撑、共享与安全:芯片…

C语言里的static变量其他语言是看不上还是学不去?

C语言里的static变量其他语言是看不上还是学不去? static变量在C语言中被用于具有静态存储期的局部变量或全局变量。它有以下几个特点: 1. 静态存储期:static变量在程序执行时分配内存,直到程序结束才会释放,其生命周期与程序的…

1024程序员节献礼,火山引擎ByteHouse带来三重产品福利

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着信息技术飞速发展,互联网、Web3、物联网、人工智能相继出现。 在这近三十年的高速发展中,“程序员”也成为构建丰富互联网世界的中坚力量…

FC-TSGAS-1624 CP451-10 MVI56E-MNETC IC697CMM742

FC-TSGAS-1624 CP451-10 MVI56E-MNETC IC697CMM742. Variscite的DART-MX8M-PLUS和VAR-SOM-MX8M-PLUS基于恩智浦i.MX 8M Plus SoC,集成人工智能能力高达每秒2.3万亿次运算(TOPS)。这些产品,结合海螺-8 AI处理器提供多达26个top,显著优于市场…

idea必装的插件 Spring Boot Helper 插件(创建 Spring Boot 项目)

Spring Spring让Java程序更加快速,简单和安全.Spring对于速度、简单性和⽣产⼒的关注使其成为 世界上最流⾏的Java框架。Spring官⽅提供了很多开源的项⽬,覆盖范围从Web开发到⼤数据,Spring发展到了今天,已经形成了⾃ ⼰的⽣态圈.我们在开发时,也倾向于使⽤Spring官⽅提供的技术…

大热电视剧《好事成双》里IT故事:科班程序员指法篇

自2023年9月19日在央视八套首播,并在腾讯视频同步播出以来,电视剧《好事成双》聚焦当代社会环境,《好事成双》用生动的群像故事触动人心,描绘了一幅当代都市男女的生活画卷,热度持续走高,成为中秋、国庆假日…

如何判断无损连接(例题)

目录 1. 定义2. 例题3. 补充 1. 定义 无损连接: 如果在关系模式的分解中,能够通过连接已分解的子关系来获得原始关系的信息,而不引入任何数据损失 候选关键字: 候选关键字是能够唯一标识每个元组的属性集。 2. 例题 设关系模式…

在Xamarin.Android项目中调用自己写的java jar包

一、开发环境 1.IntelliJ IDEA 2023.2.3 (Community Edition) 2.Visual Studio 2019 (v16.11.30) 3.Windows PowerShell 二、打开IDEA,编写Java脚本并编译为jar文件 1.打开IDEA--->File--->New--->Project... 三、打开Visual Studio 2019,…

SpringBoot_minio sdk使用自签名https证书错误处理

minio sdk使用自签名https证书错误处理 1.问题描述1.1 报错日志1.2 maven 依赖配置1.3 当前spring MinioClient配置 2.问题分析3.问题解决3.1 使用受信任的证书3.2 忽略证书验证3.2.1 minio客户端3.2.2 minio sdk 忽略证书验证3.2.2.1 拓展: 补充minioclient请求日志 4. 问题总…

如果重回大一学软件工程,你会做什么?

如果重回大一学软件工程,你会做什么? 说白了,就是想要一个过来人的学习路线呗?1、学好线性代数和离散数学,因为追本溯源,计算机行业的本质就是数学,更是算法、机器学习,视觉处理这些…

人工智能算法PPT学习

YOLO You only look once 是一种图像识别算法,速度较快。高效、灵活、泛化性能好,在工业中较为受欢迎。 图像金字塔 一幅图像的多个不同分辨率的子图构成的图像集合。是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点…

Linux本地RStudio工具安装指南及远程访问配置安装RStudio Server

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE,并通过 Web 浏览器进行访问…

【C++项目】高并发内存池第三讲PageCache框架涉及+核心实现(上)

PageCache 1. PageCache框架设计1.1整体设计1.2CentralCache向PageCache申请内存的逻辑设计 2.PageCache的核心框架实现这里着重介绍一下CentralCache向PageCache申请内存的过程: 1. PageCache框架设计 1.1整体设计 回顾: 如图所示 内存申请的过程是逐步往下的&a…