返回顶部
首页 > 资讯 > 精选 >ES6中如何使用Map与Set集合
  • 535
分享到

ES6中如何使用Map与Set集合

2023-06-17 09:06:37 535人浏览 安东尼
摘要

本篇内容主要讲解“es6中如何使用Map与Set集合”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ES6中如何使用Map与Set集合”吧!集合的概念以及和数组的区别其实数组也是集合, 只不过数组

本篇内容主要讲解“es6中如何使用Map与Set集合”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ES6中如何使用Map与Set集合”吧!

集合的概念以及和数组的区别

其实数组也是集合, 只不过数组的索引是数值类型.当想用非数值类型作为索引时, 数组就无法满足需要了.

而 Map 集合可以保存多个键-值对(key-value),  Set 集合可以保存多个元素.

对Map 和 Set 一般不会逐一遍历其中的元素. Map 一般用来存储需要频繁取用的数据,  Set 一般用来判断某个值是否存在其中.

ES 5 中对 Map 和 Set 的模拟方法

在ES 5 中,没有 Set和Map集合, 一般使用对象来模拟这两种集合, 对象的属性作为键(key),  以属性值作为值(value),  即以 property: property-value 来模拟 key-value 的形式. 具体实现如下:

模拟 Map 的键值对集合:

// 创建一个 Map 对象var map = Object.create(null);// 添加属性和属性值, 即 添加 key 和 valuemap.key1 = 'value 1';map.key2 = {};// 取得 key 对应的 value console.log(map.key1); // "value 1"console.log(map.key2); // "Object {}"

模拟 Set :

// 创建一个 Set 对象var set = Object.create(null);// 添加属性和属性值, 即 添加 key 并令其值为 true, 即表示这个key存在于集合中set.key = true;// 判断 key 是否存在, 然后进行下一步的操作if(set.key) { ... }

用对象模拟这两种集合的缺陷

由于对象中的属性名必须是字符串, 如果传入的不是字符串则会强制转换成对应的字符串类型

一般使用 if 语句来判断一个 key 是否存在于集合中,  当这个 key 对应的 value 为 false 或者可以被强制转换为 false 时,  则 if 语句认为这个key不存在.但是其实是存在的, 只不过 value = false 而已.

ES6 中的 Map 和 Set 集合

下面正式来讨论这两种集合的特点

Map

Map 中存储的是 key-value 形式的键值对,  其中的 key 和 value 可以是任何类型的,  即对象也可以作为 key . 这比用对象来模拟的方式就灵活了很多

Map 的创建和初始化

可以用new Map()构造函数来创建一个空的 Map

// 创建一个空的 Map let map = new Map();

也可以在 Map() 构造函数中传入一个数组来创建并初始化一个 Map. 传入的数组是二维数组, 其中的每一个子数组都有两个元素,  前者会被作为 key,  后者会被作为 value,  这样就形成了一个 key-value 键值对. 例如:

// 用数组来创建一个 非空的 Map let array = [ // 定义一个二维数组, 数组中的每子都有两个元素  ['key1' , 'value 1'],  // key 是 字符串 "key1", value 是字符串 "value 1"  [{} , 10086] ,     // key 是个对象, value 是数值 10086  [ 5, {} ]       // key 是个数值类型, value 是对象];let map = new Map(array); // 将数组传入 Map 构造函数中

Map 可用的 方法

  1. set(key, value): 向其中加入一个键值对

  2. get(key): 若不存在 key 则返回 undefined

  3. has(key):返回布尔值

  4. delete(key): 删除成功则返回 true,  若key不存在或者删除失败会返回 false

  5. clear(): 将全部元素清除

size 属性, 属性值为 map 中键值对的个数

遍历方法 forEach()

和数组的 forEach 方法类似, 回调函数中都包含3个参数 值, 键, 和 调用这个方法的 Map 集合本身

map.forEach(function(value, key, ownerMap){  console.log(key, value); // 每对键和值  console.log(ownerMap === map); // true});

Set 集合

Set 和 Map 最大的区别是只有键 key 而没有 value,  所以一般用来判断某个元素(key)是否存在于其中.

创建和初始化方法, 和 Map 大同小异

既可以创建一个空 set 也可以用数组来初始化一个非空的set. 和 Map 不同的是, 数组是一维数组, 每个元素都会成为 set 的键.例如:

// 创建一个数组let array = [1, 'str'];   // 一维数组// 用数组来初始化 setlet set = new Set(array);

set 的方法

1、add(key): 往set添加一个元素,  如果传入多个参数, 则只会把第一个加入进去

let set = new Set();set.add(1, 2, 3);console.log(set.has(1), set.has(2), set.has(3)); // true false false 可以看到只有第一个参数被加入进了 set

2、has(key)
3、delete(key)
4、clear()

遍历方法 forEach

和 Map 的 forEach 方法相似,  回调函数的参数也是3个 (value,  key,  ownerSet). 按道理来说因为 set 中只有 key 没有 value,  那么会掉函数中不应该存在 value 这个参数, 那么为什么这个 value 参数仍然存在呢?可能是因为 数组和 Map 的 forEach 方法的回调函数的参数都是这三个,  如果对于 Set 而改变了参数, 那么就会丢失了一致性. 这个理由......

那么既然没有 value , 那么这个value的值是什么呢?答案是和key 一样.我们可以把value和key 划等号了.下面这段代码可以验证这个说法.

set.forEach(function(value, key, ownerSet){  console.log(value === key, set === ownerSet);  // true true});

WeakSet 和 WeakMap

这两个集合比之前的两个集合在名字之前都加上了 Weak,  这个 Weak 可以直译成弱,  这个弱指的是弱引用,  那么前面不带Weak的 Set 和 Map就不弱, 就是强了,  这个强指的是强引用.

与 Set 和 Map 的区别

先说表层的区别:

  • 弱版本集合的 key 只能是对象,  对于 value 的类型没有限制.

  • 弱版本集合没有 forEach 方法, 也没有 for in 方法,  也不能用数组来初始化(会报错).

  • 弱版本可用的方法较少. WeakSet 只有 add, has, delete 方法可用; WeakMap 只有 set, has, get, delete 方法可用.

根本区别

弱版本的集合和它们对应的强版本根本的区别在对于对象的引用的强弱上,  而对象指的是 key 位置的对象, 即以对象为key的情况.

强弱版本对于 key 是对象时的引用机制如下:

将对象设置为 key 时, 就在集合中保存了这个对象的引用. 当这个对象没有其他引用了的时候, 即只有集合还引用着这个对象的时候, 弱类型的集合会放弃对这个对象的引用, 把这个对象从集合里移除, 不让它继续存在于集合中了, 有些“赶尽杀绝”的意思; 但是强类型的集合还会一直保存着对这个对象的引用, 就把它一直放在集合里.这就是 [WeakSet 和 WeakMap] 与 [Set 和 Map] 的根本区别.

要注意的是这个机制只作用于 key , 而 value 位置绑定的对象无论是否还存在别的引用, WeakMap 都不会放弃这个对象.只有这个位置的 key 绑定的对象没有其他引用时, 才会把 key 和 value 都放弃. 决定权在于 key 位置.

弱版本集合的主要用处

若版本集合可以用在需要生命周期管理的地方,例如保存对一个 DOM 对象的引用, 如果一个 DOM 对象使用完毕, 没有其他的引用了, 那么它应该被 垃圾回收,以免产生内存泄漏,那么弱版本的集合就最适合用来保存这样的对象了。

注意:四种集合都是有序的, 即元素被添加进去的顺序就是在内部保存的顺序. 对于用数组来初始化的集合也一样, 按照在数组中的位置依次添加进集合中.

到此,相信大家对“ES6中如何使用Map与Set集合”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: ES6中如何使用Map与Set集合

本文链接: https://lsjlt.com/news/288084.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ES6中如何使用Map与Set集合
    本篇内容主要讲解“ES6中如何使用Map与Set集合”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ES6中如何使用Map与Set集合”吧!集合的概念以及和数组的区别其实数组也是集合, 只不过数组...
    99+
    2023-06-17
  • javascript ES6中set集合、map集合如何使用
    本文小编为大家详细介绍“javascript ES6中set集合、map集合如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript ES6中set集合、map集合如何使用”文章能帮助大家解决疑惑,下...
    99+
    2023-07-04
  • ES6中怎么使用Map与Set集合
    这期内容当中小编将会给大家带来有关ES6中怎么使用Map与Set集合,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。集合的概念以及和数组的区别其实数组也是集合, 只不过数组...
    99+
    2024-04-02
  • javascript ES6中set集合、map集合使用方法详解与源码实例
    set与map理解 ES6中新增,set集合和map集合就是一种数据的存储结构(在ES6之前数据存储结构只有array,object),不同的场景使用不同的集合去存储数据 set集合...
    99+
    2022-12-10
    javascript ES6中set集合 map集合使用方法详解与源码实例 JS ES6中set集合使用方法 JS ES6中map集合使用方法
  • ES6中的Map与Set怎么用
    这篇文章主要介绍了ES6中的Map与Set怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中的Map与Set怎么用文章都会有所收获,下面我们一起来看看吧。Map 对象Map 对象保存键值对。任何值(对...
    99+
    2023-06-27
  • ES6中Set与WeakSet集合实例分析
    这篇文章主要讲解了“ES6中Set与WeakSet集合实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ES6中Set与WeakSet集合实例分析”吧!Set是值永不重复的特殊集合每天都...
    99+
    2023-06-17
  • ES6中Set与WeakSet集合详细介绍
    这篇文章主要讲解了“ES6中Set与WeakSet集合详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ES6中Set与WeakSet集合详细介绍”吧!目录Set是值永不重复的特殊集合S...
    99+
    2023-06-20
  • Java集合框架中如何掌握Map和Set 的使用
    这篇文章将为大家详细讲解有关Java集合框架中如何掌握Map和Set 的使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 搜索1.1 场景引入在学习编程时,我们常见的搜索方式...
    99+
    2023-06-22
  • ES6中Set与WeakSet集合的深入讲解
    目录Set是值永不重复的特殊集合Set集合基础API关于唯一值的判断Set集合遍历的3种方式Set集合案例实践Set集合与Array数组之间的转换单个数组去重多个数组合并去重获取交集...
    99+
    2024-04-02
  • Python中如何使用集合set
    小编给大家分享一下Python中如何使用集合set,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!集合 (set)由不同的元素组成,用{ }大括号括起来,用,逗号隔开无序的集合中的元素必须是比可变类型集合会自动去重例如:s ...
    99+
    2023-06-25
  • ES6中Set和Map怎么用
    这篇文章将为大家详细讲解有关ES6中Set和Map怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.SetES6提供了新的数据结构Set。类似于数组,只不过其成员值...
    99+
    2024-04-02
  • es6的set集合如何增加元素
    本篇内容介绍了“es6的set集合如何增加元素”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!es6的set集合可以使用add()方法来增加元...
    99+
    2023-07-05
  • ES6中集合set的示例分析
    这篇文章给大家分享的是有关ES6中集合set的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。集合set新的数据结构Set(集合),它类似于数组,成员的值都是唯一的,集合实...
    99+
    2024-04-02
  • 如何解读Java三大集合中map list set的用法
    如何解读Java三大集合中map list set的用法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Map接口和Collection接口是所有集合框架的父接口...
    99+
    2023-06-25
  • ES6中Map集合的示例分析
    这篇文章将为大家详细讲解有关ES6中Map集合的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Map集合类似于对象,也是键值对的集合,但是 键 不限于字符串,各种...
    99+
    2024-04-02
  • C++中map和set如何使用
    这篇文章主要介绍了C++中map和set如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++中map和set如何使用文章都会有所收获,下面我们一起来看看吧。一、set1.1 set的介绍首先要知道set...
    99+
    2023-07-05
  • Python集合set()方法如何使用
    这篇文章主要讲解了“Python集合set()方法如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python集合set()方法如何使用”吧!在python3中按数据类型的可变与不可变...
    99+
    2023-06-29
  • Map与Set怎么使用
    这篇文章主要介绍“Map与Set怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Map与Set怎么使用”文章能帮助大家解决问题。1.基本概念我们先来了解以下 Map 和 Set 的基本概念,这...
    99+
    2023-07-02
  • ES6中for循环和Map、Set怎么用
    这篇文章给大家分享的是有关ES6中for循环和Map、Set怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:现在大家先想一想,如果要你遍历一个数组的元素,你会选择如...
    99+
    2024-04-02
  • java中map集合怎么使用
    在Java中,Map是一种键值对的集合,它提供了一种将键映射到值的方式。Map接口是Java集合框架中的一部分,它有多个实现类,例如...
    99+
    2023-10-08
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作