JavaScript之Map和Set_动力节点Java学院整理


Posted in Javascript onJune 29, 2017

JavaScript的默认对象表示方式{}可以视为其他语言中的MapDictionary的数据结构,即一组键值对。
但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。
为了解决这个问题,最新的ES6规范引入了新的数据类型Map。要测试你的浏览器是否支持ES6规范,请执行以下代码,如果浏览器报ReferenceError错误,那么你需要换一个支持ES6的浏览器:

'use strict';
var m = new Map();
var s = new Set();
alert('你的浏览器支持Map和Set!');

Map

Map是一组键值对的结构,具有极快的查找速度。

举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array:

var names = ['Michael', 'Bob', 'Tracy'];
var scores = [95, 75, 85];

给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,Array越长,耗时越长。

如果用Map实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用JavaScript写一个Map如下:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95

初始化Map需要一个二维数组,或者直接初始化一个空MapMap具有以下方法:

var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam'); // 88

Set

SetMap类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key
要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

重复元素在Set中自动被过滤:

var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}

注意数字3和字符串'3'是不同的元素。

通过add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通过delete(key)方法可以删除元素:

var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}

小结

Map和Set是ES6标准新增的数据类型,请根据浏览器的支持情况决定是否要使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
HTML Color Picker(js拾色器效果)
Aug 27 Javascript
JS中表单的使用小结
Jan 11 Javascript
Javascript 函数parseInt()转换时出现bug问题
May 20 Javascript
JS 在指定数组中随机取出N个不重复的数据
Jun 10 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
Sep 11 Javascript
跟我学习javascript的prototype原型和原型链
Nov 18 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
May 23 Javascript
Bootstrap开发实战之响应式轮播图
Jun 02 Javascript
Vue.js学习之过滤器详解
Jan 22 Javascript
用js制作淘宝放大镜效果
Oct 28 Javascript
JavaScript时间戳与时间日期间相互转换
Dec 11 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
Nov 03 Javascript
JavaScript之面向对象_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之RegExp_动力节点Java学院整理
Jun 29 #Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 #Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 #Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
Jun 29 #jQuery
详解vue父子组件间传值(props)
Jun 29 #Javascript
You might like
php入门之连接mysql数据库的一个类
2012/04/21 PHP
php-msf源码详解
2017/12/25 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
2014/04/10 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
Bootstrap项目实战之首页内容介绍(全)
2016/04/25 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
nodejs入门教程六:express模块用法示例
2017/04/24 NodeJs
webpack4的迁移的使用方法
2018/05/25 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
用Python输出一个杨辉三角的例子
2014/06/13 Python
详解supervisor使用教程
2017/11/21 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
python使用matplotlib画饼状图
2018/09/25 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Python for i in range ()用法详解
2020/09/18 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
西班牙著名的珠宝首饰品牌:P D PAOLA
2018/09/15 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
网络教育毕业生自我鉴定
2013/10/10 职场文书
设备售后服务承诺书
2014/05/30 职场文书
创文明城市标语
2014/06/16 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
学术会议邀请函
2015/01/30 职场文书
财务总监岗位职责
2015/02/03 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫