当前位置: 首页 > news >正文

ES6之Map和Set有什么不同?

一、Map

1.定义

Map是ES6提供的一种新的数据结构,它是键值对的集合,类似于对象,但是键的范围不限于字符串,各种类型的值都可以当做键。

Object结构是“字符串-值”的对应,Map结构则是“值-值”的对应 

 2.代码示例

Map本身是一个构造函数,先来生成一个Map数据结构,从打印的结果就可以看出,Map实例有以下属性和方法:

size、set()、get()、has()、delete()、clear()、keys()、values()、entries()、forEach()

const map = new Map()
console.log(map, 'newMap');

2.1存储数据 set()

格式为set(key,value),如果key对应的value已经有值,就会被更新;没有值就存储新的“键-值”对,并且key可以是任何数据类型。

	// 1.1 key为stringmap.set('test', 1)// 1.2 key 为numbermap.set(999, '数字')// 1.3 key 为functionconst temp = function() {}map.set(temp, '这是函数')// 1.4 key 为undefinedmap.set(undefined, '这是undefined')// 1.5 key 为nullmap.set(null, '这是null')// 1.6 key 为booleanmap.set(false, '假')// 1.7 链式写法map.set('测试', '测试value').set(2, 22222222).set(true, '真')

2.2获取数据 get()

格式为get(key),但不能使用链式写法,会报错

  // 打印出来看结果--->与上面存储的数据一一对应console.log(map.get('test'));console.log(map.get(999));console.log(map.get(temp));console.log(map.get(undefined));console.log(map.get(null));console.log(map.get(false));console.log(map.get('测试'));console.log(map.get(2));console.log(map.get(true));

2.3 查看map中的成员总数 size属性

返回值为number

	console.log(map.size); // 9

2.4判断某个key(键)是否在Map中 has()

返回值为number

	console.log(map.has('test'), '是否存在test');console.log(map.has('test1'), '是否存在test1');

2.5删除某个key(键) delete()

返回值为bollean 删除成功true,删除失败false

	console.log(map.delete('test'), '是否删除成功'); // true

2.6清除所有成员 clear()

没有返回值

	map.clear()console.log(map, '所有map');

2.7遍历方法:keys()、values()、entries()、forEach()

	// 7.1 返回键名的遍历器->keys()for (let key of map.keys()) {console.log(key, 'key');}// 7.2 返回键值的遍历器->values()for (let value of map.values()) {console.log(value, 'value');}// 7.3 返回所有成员的遍历器->entries()for (let item of map.entries()) {console.log(item, 'item为数组');}// 7.4 遍历Map的所有成员->forEach()map.forEach(function(value, key, map) {console.log(value, key, 'value + key');console.log(map, 'map中的所有成员');})

二、Set

1.定义

Set是Es6提供的一种新的数据结构,它类似于数组,又不同数组,因为它成员的值都是唯一的。

利用Set值唯一的特性,Set可以用来做数组去重,并且Set中的值会自动排序

2.代码示例

Set本身也是一个构造函数,先来生成一个Set数据结构,从打印的结果就可以看出,Set实例有以下属性和方法:

size、add()、has()、delete()、clear()、keys()、values()、entries()、forEach()

	const set = new Set()

2.1存储数据 add()

格式为add(value) ;返回值为Set本身,可以使用链式写法;但由于set中的值唯一,重复添加会被直接过滤

	set.add(0).add(1).add(1).add(2).add(2)console.log(set.add(0).add(1).add(1).add(2).add(2).add(3));

2.2判断某个值是否在Set中has()

返回值为bollean

	console.log(set.has(0)); // trueconsole.log(set.has(99)); // false

2.3删除数据 delete()

返回值为bollean 删除成功true,删除失败false

	console.log(set.delete(0), '是否删除成功');console.log(set, '删除后数据');

2.4清除所有成员 clear()

没有返回值

	set.clear()console.log(set, '清除后的set');

2.5遍历方法:keys()、values()、entries()、forEach()

	// 5.1 返回键名的遍历器->keys()for (let key of set.keys()) {console.log(key, 'key');}// 5.2 返回值的遍历器->values()for (let value of set.values()) {console.log(value, 'value');}// 5.3 返回遍历器->entries()for (let item of set.entries()) {console.log(item, 'item为数组');}// 5.4 遍历Map的所有成员->forEach()set.forEach(function(value, key, set) {console.log(value, key, 'forEach');console.log(set, 'set中的所有成员');})

三、Set和Map的对比

1.相同点:

都可以通过for... of进行遍历

2.不同点:

1.定义:

Set是Es6提供的一种新的数据结构,它类似于数组,又不同数组,因为它成员的值都是唯一的。
Map也是Es6提供的一种新的数据结构,它是键值对的集合,类似于对象,但是键的范围不限于字符串,各种类型的值都可以当做键。也就是说,Object结构是“字符串—值”的对应,Map结构则是“值—值”的对应。

2.Map可以通过get方法获取值,但Set不可以,因为Set只有值

3.利用Set值唯一的特性,Set可以用来做数组去重,并且Set中的值会自动排序;Map没有格式限制,可以用来做数据存储

http://www.lryc.cn/news/171641.html

相关文章:

  • Java中的集合
  • 9.4.2servlet基础2
  • 嵌入式学习 - 用电控制电
  • QCA组态如何科学命名?
  • 外贸行业中常用的邮箱推荐
  • 高性能实践
  • 说说hashCode() 和 equals() 之间的关系?
  • 算法通关村-----图的基本算法
  • 基于随机森林+小型智能健康推荐助手(心脏病+慢性肾病健康预测+药物推荐)——机器学习算法应用(含Python工程源码)+数据集(二)
  • stm32学习-芯片系列/选型
  • LeetCode //C - 200. Number of Islands
  • 使用Python构建强大的网络爬虫
  • 图像处理之《基于语义对象轮廓自动生成的生成隐写术》论文精读
  • Java 字节流
  • 华硕电脑怎么录屏?分享实用录制经验!
  • python学习--python的异常处理机制
  • nacos+Dubbo整合快速入门
  • QT实现钟表
  • 准备我们心爱的IDEA写Jsp
  • 将近 5 万字讲解 Python Django 框架详细知识点(更新中)
  • Arcgis提取每个像元的多波段反射率值
  • JavaScript面试题整理(一)
  • 数据结构:树和二叉树之-堆排列 (万字详解)
  • 爬虫入门基础:深入解析HTTP协议的工作过程
  • k8备份与恢复-Velero
  • 基于Python开发的火车票分析助手(源码+可执行程序+程序配置说明书+程序使用说明书)
  • 旺店通·企业奇门与金蝶云星空对接集成订单查询连通销售订单新增(旺店通销售-金蝶销售订单-小红书)
  • 卡尔曼滤波应用在数据处理方面的应用
  • PROFIBUS主站转ETHERCAT协议网关
  • Vue路由的使用及node.js下载安装和环境搭建