欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-29 12:54:07
本文实例讲述了es6教程之for循环和map,set用法。分享给大家供大家参考,具体如下: 现在大家先想一想,如果要你遍历一个数组的元素,你会选择如何去做呢?一般都会想起...

本文实例讲述了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程序设计有所帮助。