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 相关文章推荐
原型方法的不同写法居然会影响调试的解决方法
Mar 08 Javascript
Lazy Load 延迟加载图片的 jQuery 插件
Feb 06 Javascript
Javascript处理DOM元素事件实现代码
May 23 Javascript
Windows8下搭建Node.js开发环境教程
Sep 03 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
Jan 04 Javascript
vue自动化表单实例分析
May 06 Javascript
微信小程序中时间戳和日期的相互转换问题
Jul 09 Javascript
Vue2.0 v-for filter列表过滤功能的实现
Sep 07 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
通过扫小程序码实现网站登陆功能
Aug 22 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
Jan 06 Javascript
vue+echarts实现动态折线图的方法与注意
Sep 01 Javascript
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中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
js DOM的学习笔记
2011/12/22 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
Javascript之String对象详解
2016/06/08 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
python数字图像处理之高级滤波代码详解
2017/11/23 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Python接口自动化测试的实现
2020/08/28 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
Python读写锁实现实现代码解析
2020/11/28 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
使用Html5、CSS实现文字阴影效果
2018/01/17 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
竞争上岗演讲稿
2014/01/05 职场文书
工厂实习感言
2014/01/14 职场文书
护士找工作求职信
2014/07/02 职场文书
移交协议书
2014/08/19 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
中标通知书范本
2015/04/17 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
MySQL数据库完全卸载的方法
2022/03/03 MySQL