ES6规范之Map,Set及Iterable

ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。

最新版ECMAScript 6标准(简称ES6)已经在2015年6月正式发布了,其中引入了Map、Set、Iterable这写新成员,下面通过文字来介绍介绍这些新家伙。

1.Map

map是ES6引入的新的数据类型,是一组键值对集合,具有极快的查找速度。

eg:根据同学的姓名,查找他对应的成绩;

----

在此之前,需要用两个array来实现这样的需求:

var names=["Tom","Jack","Ken"];

var scores=["100","80","90"];

function getScore(name){

  for(var i=0;i<names.length;i++){

    if (names[i] === name) {

      return scores[i];

    } 

    if (i === names.length) {

      return "cann't find the name:"+name;

    }

  }

}

----

引入Map之后,我们可以这样可

var scores=new Map();

scores.set("Tom",100);

scores.set("Jack",80);

scores.set("Ken",90);

通过scores.get();就可以获取

另外在生命Map时,也可以这样声明:

var map=new Map(["Tom",100],["Jack",80],["Ken",90]);

map中智能存储一个相同的key,再次放入相同的key,会覆盖之前的value

2.Set

同Map类似,只是他里面存储的是单列元素,没有key,而且元素不能重复。

eg:

var sets=new Set();

sets.add(1);

sets.add(2);

也可以这样声明,

var sets=new Set([1,2]);

常用的函数:

add();添加元素,

delete();删除元素

3.iterable

ES6标准引入了新的iterable类型,ArrayMapSet都属于iterable类型。用来遍历集合。

iterable类型的集合可以通过for...of...来遍历,for...of...也是ES6中的新语法

eg1:

var array=[1,2,3];

for(var value of array){

  console.log(value);

}

eg2:

var sets=new Set([1,2,3]);

for(var value of sets){

  console.log(value);

}

var maps=new Map([1,"Tom"],[2,"Jck"],[3,"Ken"]);

for (var kv of maps) {

  console.log("key:"+kv[0]+",value:"+kv[1]);

}

那么问题来了:

for of 和 for in 有啥区别呢

for in用来遍历对象的属性,一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性,

当我们给array数组添加一个属性时,会有意外

eg:

var arr=["A","B","C"];

arr.name="Tom";

for(var i in arr){

  console.log(i);//1,2,3,"name"

}

for in 循环中会把name属性包含进去,arr还有length属性,却没有包含进去,而如果使用for of只遍历集合的元素,即value

for(var i of arr){
  console.log(i);//"A","B","C"

}

总结:for in 遍历的索引,for of遍历集合中的元素

其实更好的遍历方法是使用iterable内置的foreach方法

eg:

var a = ['A', 'B', 'C'];

a.foreach(function(element,index,array){

//eletment 当前元素的值

//key当前元素的索引

//array当前数组

console.log(index+","+element+","+array);

});

SetArray类似,但Set没有索引,因此回调函数的前两个参数都是元素本身:

eg:

var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
    console.log(element);
});

Map的回调函数参数依次为valuekeymap本身:

eg:

var m = new Map([[1, 'A'], [2, 'B'], [3, 'C']]);
m.forEach(function (value, key, map) {
    console.log(value);
});

如果你只对element感兴趣,那么也可以这样:

eg:

var m = new Map([[1, 'A'], [2, 'B'], [3, 'C']]);

m.forEach(funtion(element){

console.log(element);

});

不被看好,那又怎样,不积硅步无以至千里。on the way。

猜你喜欢

转载自www.cnblogs.com/yi-ma-dang-xian/p/10845276.html