iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >Map和Set两种数据结构在ES6的作用是什么
  • 412
分享到

Map和Set两种数据结构在ES6的作用是什么

2024-04-02 19:04:59 412人浏览 独家记忆
摘要

这篇文章主要介绍“Map和Set两种数据结构在es6的作用是什么”,在日常操作中,相信很多人在Map和Set两种数据结构在ES6的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

这篇文章主要介绍“Map和Set两种数据结构es6的作用是什么”,在日常操作中,相信很多人在Map和Set两种数据结构在ES6的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Map和Set两种数据结构在ES6的作用是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Set是一种叫做集合的数据结构,Map是一种叫做字典的数据结构

那什么是集合?什么又是字典呢?

  •  集合

集合,是由一堆无序的、相关联的,且不重复的内存结构【数学中称为元素】组成的组合

  •  字典

字典(dictionary)是一些元素的集合。每个元素有一个称作key 的域,不同元素的key 各不相同

它们之间又有什么区别呢?

  •  共同点:集合、字典都可以存储不重复的值

  •  不同点:集合是以[值,值]的形式存储元素,字典是以[键,值]的形式存储

背景

大多数主流编程语言都有多种内置的数据集合。例如python拥有列表(list)、元组(tuple)和字典(dictionary),Java有列表(list)、集合(set)、队列(queue)

然而  javascript 直到ES6的发布之前,只拥有数组(array)和对象(object)这两个内建的数据集合

在 ES6 之前,我们通常使用内置的 Object 模拟Map

但是这样模拟出来的map会有一些缺陷,如下:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2.  Object的属性键是String或Symbol,这限制了它们作为不同数据类型的键/值对集合的能力

  3.  Object不是设计来作为一种数据集合,因此没有直接有效的方法来确定对象具有多少属性

Set

定义: Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用,Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即 Set 中的元素是唯一的

Set本身是一个构造函数,用来生成 Set 数据结构

基本使用

  •  语法

new Set([iterable]) 接收一个数组(或者具有 iterable 接口的其他数据结构), 返回一个新的Set对象

const set = new Set([1,2,1,2])  console.log(set) // {1,2}

上面代码可以看出 Set 是可以去除数组中的重复元素

属性及方法

属性

  •  size: 返回集合中所包含的元素的数量 

console.log(new Set([1,2,1,2]).size) // 2

操作方法

  •  add(value): 向集合中添加一个新的项

  •  delete(value): 从集合中删除一个值

  •  has(value): 如果值在集合中存在,返回ture, 否则返回false

  •  clear(): 移除集合中的所有项 

let set = new Set()  set.add(1)  set.add(2)  set.add(2)  set.add(3)  console.log(set) // {1,2,3}  set.has(2) // true  set.delete(2)    set.has(2) // false  set.clear()

遍历方法

  •  keys(): 返回键名的遍历器

  •  values(): 返回键值的遍历器

  •  entries(): 返回键值对的遍历器

  •  forEach(): 使用回调函数遍历每个成员 

let set = new Set([1,2,3,4])  // 由于set只有键值,没有键名,所以keys() values()行为完全一致  console.log(Array.from(set.keys())) // [1,2,3,4]  console.log(Array.from(set.values())) // [1,2,3,4]  console.log(Array.from(set.entries())) //  [[1,1],[2,2],[3,3],[4,4]]  set.forEach((item) => { console.log(item)}) // 1,2,3,4

应用场景

因为 Set 结构的值是唯一的,我们可以很轻松的实现以下

// 数组去重  let arr = [1, 1, 2, 3];  let unique = [... new Set(arr)];  let a = new Set([1, 2, 3]);  let b = new Set([4, 3, 2]);    // 并集  let uNIOn = [...new Set([...a, ...b])]; // [1,2,3,4]  // 交集  let intersect = [...new Set([...a].filter(x => b.has(x)))]; [2,3]    // 差集  let difference = Array.from(new Set([...a].filter(x => !b.has(x)))); [1]

WeakSet

WeakSet 对象是一些对象值的集合, 并且其中的每个对象值都只能出现一次。在WeakSet的集合中是唯一的

WeakSet 的出现主要解决弱引用对象存储的场景, 其结构与Set类似

与Set的区别

  •  与Set相比,WeakSet 只能是对象的集合,而不能是任何类型的任意值

  •  WeakSet集合中对象的引用为弱引用。如果没有其他的对WeakSet中对象的引用,那么这些对象会被当成垃圾回收掉。这也意味着WeakSet中没有存储当前对象的列表。正因为这样,WeakSet 是不可枚举的

WeakSet 的属性跟操作方法与 Set 一致,不同的是 WeakSet 没有遍历方法,因为其成员都是弱引用,弱引用随时都会消失,遍历机制无法保证成员的存在

上面一直有提到弱引用,那弱引用到底是指什么呢?

弱引用是指不能确保其引用的对象不会被垃圾回收器回收的引用,换句话说就是可能在任意时间被回收

Map

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。一个Map对象在迭代时会根据对象中元素的插入顺序来进行 — 一个  for...of 循环在每次迭代后会返回一个形式为[key,value]的数组

基本使用

  •  语法

new Map([iterable]) Iterable 可以是一个数组或者其他 iterable 对象,其元素为键值对(两个元素的数组,例如: [[ 1, 'one' ],[ 2, 'two' ]])。每个键值对都会添加到新的 Map

let map = new Map()  map.set('name', 'Vuejs.cn');  console.log(map.get('name'))

属性及方法

基本跟 Set 类似,同样具有如下方法属性

  •  size: 返回 Map 结构的元素总数 

let map = new Map()  map.set('name', 'vuejs.cn'); console.log(map.size) // 1  console.log(new Map([['name','vue3js.cn'], ['age','18']]).size) // 2

操作方法

  •  set(key, value): 向 Map 中加入或更新键值对

  •  get(key): 读取 key 对用的值,如果没有,返回 undefined

  •  has(key): 某个键是否在 Map 对象中,在返回 true 否则返回 false

  •  delete(key): 删除某个键,返回 true, 如果删除失败返回 false

  •  clear(): 删除所有元素 

let map = new Map()  map.set('name','vue3js.cn')  map.set('age','18') console.log(map) // Map {"name" => "vuejs.cn", "age" => "18"}  map.get('name') // vue3js.cn   map.has('name') // true  map.delete('name')    map.has(name) // false  map.clear() // Map {}

遍历方法

  •  keys():返回键名的遍历器

  •  values():返回键值的遍历器

  •  entries():返回所有成员的遍历器

  •  forEach():遍历 Map 的所有成员 

let map = new Map()  map.set('name','vue3js.cn')  map.set('age','18')   console.log([...map.keys()])  // ["name", "age"]  console.log([...map.values()])  // ["vue3js.cn", "18"]  console.log([...map.entries()]) // [['name','vue3js.cn'], ['age','18']]  // name vuejs.cn  // age 18  map.forEach((value, key) => { console.log(key, value)})

应用场景

Map 会保留所有元素的顺序, 是在基于可迭代的基础上构建的,如果考虑到元素迭代或顺序保留或键值类型丰富的情况下都可以使用,下面摘抄自 vue3 源码中依赖收集的核心实现

let depsMap = targetMap.get(target)   if (!depsMap) {     targetMap.set(target, (depsMap = new Map()))   }   let dep = depsMap.get(key)   if (!dep) {     depsMap.set(key, (dep = new Set()))   }   if (!dep.has(activeEffect)) {     dep.add(activeEffect)     activeEffect.deps.push(dep)     ...   }

WeakMap

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的

与Map的区别

  •  Map 的键可以是任意类型,WeakMap 的键只能是对象类型

  •  WeakMap 键名所指向的对象,不计入垃圾回收机制

WeakMap 的属性跟操作方法与 Map 一致,同 WeakSet 一样,因为是弱引用,所以 WeakSet 也没有遍历方法

类型的转换

  •  Map 转为 Array 

// 解构  const map = new Map([[1, 1], [2, 2], [3, 3]])  console.log([...map]) // [[1, 1], [2, 2], [3, 3]]  // Array.from()  const map = new Map([[1, 1], [2, 2], [3, 3]])  console.log(Array.from(map)) // [[1, 1], [2, 2], [3, 3]]
  •  Array 转为 Map 

const map = new Map([[1, 1], [2, 2], [3, 3]])  console.log(map) // Map {1 => 1, 2 => 2, 3 => 3}
  •     Map 转为 Object 

// 非字符串键名会被转换为字符串  function mapToObj(map) {      let obj = Object.create(null)      for (let [key, value] of map) {          obj[key] = value      }      return obj  }  const map = new Map().set('name', 'vue3js.cn').set('age', '18')  mapToObj(map)  // {name: "vue3js.cn", age: "18"}
  •  Object 转为 Map 

let obj = {"a":1, "b":2};  let map = new Map(Object.entries(obj))

总结

  •  Set、Map、WeakSet、WeakMap、都是一种集合的数据结构

  •  Set、WeakSet 是[值,值]的集合,且具有唯一性

  •  Map 和 WeakMap 是一种[键,值]的集合,Map 的键可以是任意类型,WeakMap 的键只能是对象类型

  •  Set 和 Map 有遍历方法,WeakSet 和 WeakMap 属于弱引用不可遍历 

到此,关于“Map和Set两种数据结构在ES6的作用是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Map和Set两种数据结构在ES6的作用是什么

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Map和Set两种数据结构在ES6的作用是什么
    这篇文章主要介绍“Map和Set两种数据结构在ES6的作用是什么”,在日常操作中,相信很多人在Map和Set两种数据结构在ES6的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • ES6中Set和Map数据结构的示例分析
    这篇文章主要介绍了ES6中Set和Map数据结构的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。ES6 的 Set:ES6 提供了新...
    99+
    2024-04-02
  • 【Java 数据结构】Map和Set的介绍
    目录 1、Map 和 Set 的概念 2、模型 3、Map 的学习 3.1 关于 Map.Entry 3.2 Map 的常用方法 4、Set 的常用方法  5、 Map 和 Set 的注意点 1、Map 和 Set 的概念 Java...
    99+
    2023-09-11
    数据结构
  • ES6新数据结构Set与WeakSet怎么用
    这篇文章主要介绍ES6新数据结构Set与WeakSet怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!新数据结构Set与WeakSet1. SetSet类似于数据,但是成员值都是...
    99+
    2024-04-02
  • ES6新数据结构Map功能怎么用
    这篇文章主要介绍ES6新数据结构Map功能怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:新数据结构MapJavaScript中对象的本质是键值对的集合,但是键只能是字...
    99+
    2024-04-02
  • JavaScript的Set数据结构是什么
    JavaScript的Set数据结构是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 什么是 SetSet 可以简单的看作是数学上的集合。它是一系列无...
    99+
    2023-06-22
  • 新增的es6数据结构是什么
    本文小编为大家详细介绍“新增的es6数据结构是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“新增的es6数据结构是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • Java数据结构中的Map与Set该怎么理解
    这篇文章主要为大家分析了Java数据结构中的Map与Set该怎么理解的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Java数据结构中的Map与Set该怎么理...
    99+
    2023-06-29
  • JavaScript中Map数据结构是怎么样的
    这篇“JavaScript中Map数据结构是怎么样的”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“JavaScript中Map数据结构是怎么样的”,小编整理了以下知识点,请大家跟着小编的步伐一...
    99+
    2023-06-28
  • Redis的六种底层数据结构是什么
    本篇内容介绍了“Redis的六种底层数据结构是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、简单动...
    99+
    2024-04-02
  • C++数据结构在性能优化中的作用是什么?
    c++++中的数据结构对性能优化至关重要。选择数据结构时应考虑:访问模式插入和删除操作频率预期数据集大小内存限制数组在寻址快速、插入和删除效率高方面表现出色,但如果需要在中间位置插入或删...
    99+
    2024-05-08
    数据结构 性能优化 c++
  • 数据库set语句的作用是什么
    数据库中的SET语句用于修改或设置数据库的属性、变量或会话参数。它可以用于更改数据库或会话级别的配置选项,以满足特定的需求。SET语...
    99+
    2023-09-05
    数据库
  • es6解构赋值的作用是什么
    本文小编为大家详细介绍“es6解构赋值的作用是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“es6解构赋值的作用是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 ...
    99+
    2024-04-02
  • redis的五种数据类型底层数据结构是什么
    redis 提供了五种数据类型,每种类型对应特定的底层数据结构:字符串:简单动态字符串(sds),优化二进制安全字符串存储。哈希:哈希表(dict),快速键值对存储。列表:双向链表或压缩...
    99+
    2024-04-08
    键值对
  • Redis中内部数据结构intset的作用是什么
    本篇文章为大家展示了Redis中内部数据结构intset的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。intset数据结构简介intset顾名思义,是由...
    99+
    2024-04-02
  • Redis中内部数据结构quicklist的作用是什么
    Redis中内部数据结构quicklist的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。quicklist概述Redis对外暴露的...
    99+
    2024-04-02
  • Redis中内部数据结构sds的作用是什么
    Redis中内部数据结构sds的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。sds的数据结构定义我们知道,在C语言...
    99+
    2024-04-02
  • JWT的原理和数据结构是什么
    这篇文章主要介绍“JWT的原理和数据结构是什么”,在日常操作中,相信很多人在JWT的原理和数据结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JWT的原理和数据结构是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • Redis中内部数据结构ziplist的作用是什么
    本篇文章为大家展示了Redis中内部数据结构ziplist的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。什么是ziplistRedis官方对于zipli...
    99+
    2024-04-02
  • Redis中内部数据结构dict的作用是什么
    本篇文章为大家展示了Redis中内部数据结构dict的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。dict的数据结构定义为了实现增量式重哈希(incre...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作