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特效 鼠标移动背景云变化
Dec 28 Javascript
js中style.display=&quot;&quot;无效的解决方法
Oct 30 Javascript
百度地图自定义控件分享
Mar 04 Javascript
apply和call方法定义及apply和call方法的区别
Nov 15 Javascript
Bootstrap每天必学之按钮(Button)插件
Apr 25 Javascript
js修改onclick动作的四种方法(推荐)
Aug 18 Javascript
详解用vue编写弹出框组件
Jul 04 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
Jul 31 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
Dec 24 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
解决vue build打包之后首页白屏的问题
Mar 06 Javascript
mpvue实现左侧导航与右侧内容的联动
Oct 21 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
基于JQuery的一句话搞定手风琴菜单
2012/09/14 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
python 实现红包随机生成算法的简单实例
2017/01/04 Python
python语言中with as的用法使用详解
2018/02/23 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Vans(范斯)新西兰官方网站:美国原创极限运动品牌
2020/09/19 全球购物
实习护理工作自我评价
2013/09/25 职场文书
松材线虫病防治方案
2014/06/15 职场文书
房地产端午节活动方案
2014/08/24 职场文书
企业法人代表证明书
2014/09/27 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
小英雄雨来观后感
2015/06/09 职场文书
致接力运动员加油稿
2015/07/21 职场文书
暑假生活随笔
2015/08/15 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers