ES6教程之for循环和Map,Set用法分析


Posted in Javascript onApril 10, 2017

本文实例讲述了ES6教程之for循环和Map,Set用法。分享给大家供大家参考,具体如下:

现在大家先想一想,如果要你遍历一个数组的元素,你会选择如何去做呢?一般都会想起for循环:

for (var index = 0; index < myArray.length; index++) {
 console.log(myArray[index]);
}

可惜我得告诉你,这个方法是二十年的人才应该使用的方法,在ES5中已经提出了更为简便的forEach方法,代码如下:

myArray.forEach(function (value) {
 console.log(value);
});

虽然forEach方法简短一点,但是它也有它的缺点,就是不能够break来中途退出循环,也不能通过return来退出循环。

那么不是还有for-in方法吗:

for (var index in myArray) { 
 console.log(myArray[index]);
}

可是for-in方法实际上是为存储key的键值对型对象准备的,而不是为数组准备的,它的下标为字符串“1”,“2”……相信大家都知道“1”+“2”会怎么样吧?

for-of循环

ES6为了不影响以前的代码,为了满足很多人已经养成的习惯,只能推出一种新的循环语法for-of:

for (var value of myArray) {
 console.log(value);
}

对比for-in和for-of:

var a = ["a","b","c","d","e"];
for (var idx in a) {
  console.log( idx ); 
  }// 0 1 2 3 4 
for (var val of a) {
  console.log( val ); 
  }// "a" "b" "c" "d" "e"

for-of不仅仅可以用于数组,还可以用在dom对象上,同样作用于Map和Set对象

下面介绍一下Map和Set对象

Map,Set

JavaScript的默认对象表示方式是{},但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。

为了解决这个问题,最新的ES6规范引入了新的数据类型Map。

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

我们看看Map的使用示例:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95
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

上面的has方法比indexOf速度快。

Set和Map类似,也是存在key的列表,只不过Set中的元素不能够重复。

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

可以看到,再次添加的重复数据会被过滤掉。

那么这两种对象的运用场景有哪些呢?

Map可以用来存储键值对,比如姓名和年龄,而Set可以用来存储不能重复的目标,比如学号列表。

for-of用于对象

好啦,介绍完了两种类型的新对象,让我们看看for-of如何作用于Set对象上的:

var uniqueWords = new Set(words);
for (var word of uniqueWords) {
 console.log(word);
}

遍历Map对象则不同,因为Map是以键值对存储的,所以我们需要分开两个单独的变量来遍历:

for (var [key, value] of phoneBookMap) {
 console.log(key + "'s phone number is: " + value);
}

但是需要注意一点。for-of并不是用来遍历普通的对象的属性的,如果我们一定要这么做,可以使用for-in或者如下方法:

for (var key of Object.keys(someObject)) {
 console.log(key + ": " + someObject[key]);
}

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
jquery foreach使用示例
Sep 12 Javascript
javascript修改图片src的方法
Jan 27 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
Apr 07 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
Aug 01 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
Dec 17 Javascript
详解webpack+express多页站点开发
Dec 22 Javascript
JQuery通过后台获取数据遍历到前台的方法
Aug 13 jQuery
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
微信小程序如何使用云开发
May 17 Javascript
vue中的循环对象属性和属性值用法
Sep 04 Javascript
从源码角度来回答keep-alive组件的缓存原理
Jan 18 Javascript
vue首次渲染全过程
Apr 21 Vue.js
javascript实现动态显示颜色块的报表效果
Apr 10 #Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 #Javascript
ES6生成器用法实例分析
Apr 10 #Javascript
基于javascript的异步编程实例详解
Apr 10 #Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 #Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 #Javascript
js实现适配不同的屏幕大小
Apr 10 #Javascript
You might like
PHP新手上路(六)
2006/10/09 PHP
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
图片之间的切换
2006/06/26 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
jQuery实现点击图标div循环放大缩小功能
2018/09/30 jQuery
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
python实现xlsx文件分析详解
2018/01/02 Python
python实现将excel文件转化成CSV格式
2018/03/22 Python
python实现彩色图转换成灰度图
2019/01/15 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
Python可变参数会自动填充前面的默认同名参数实例
2019/11/18 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
python实现猜数游戏
2020/03/27 Python
keras slice layer 层实现方式
2020/06/11 Python
使用OpenCV去除面积较小的连通域
2020/07/05 Python
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
升职自荐书范文
2013/11/28 职场文书
2014高考励志标语
2014/06/05 职场文书
2014年党小组工作总结
2014/12/20 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
学校工会工作总结2015
2015/05/19 职场文书
导游词之南京汤山温泉
2019/11/26 职场文书