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 相关文章推荐
网易JS面试题与Javascript词法作用域说明
Nov 09 Javascript
extjs两个tbar问题探讨
Aug 08 Javascript
javascript弹出页面回传值的方法
Jan 28 Javascript
js进行表单验证实例分析
Feb 10 Javascript
JS实现为排序好的字符串找出重复行的方法
Mar 02 Javascript
微信小程序  自定义创建详细介绍
Oct 27 Javascript
JavaScript 函数节流详解及方法总结
Feb 09 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
Feb 18 Javascript
vue双向绑定简要分析
Mar 23 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
Feb 06 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
Mar 13 Javascript
js实现有趣的倒计时效果
Jan 19 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中的时间显示
2007/01/18 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
2013/06/25 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
php实现分页显示
2015/11/03 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
2018/02/05 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
使用已经得到的keras模型识别自己手写的数字方式
2020/06/29 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
如何写一份好的自荐信
2014/01/02 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
个性发展自我评价
2014/02/11 职场文书
购房意向书
2014/04/01 职场文书
初中学生期末评语
2014/04/24 职场文书
个性婚礼策划方案
2014/05/17 职场文书
演讲开场白台词大全
2015/05/29 职场文书
毕业生政审意见范文
2015/06/04 职场文书