javascript中默认使用 {} 来表示一组键值对。

但是javascript的对象有个问题,key必须是字符串类型的,其实上其他数据类型作为key也是合理的。

为了解决这个问题,es6中添加了Map。

如何声明:

'use strict';
var a = new Map();
var s = new Set();
复制代码

#Map

举个例子,假设要根据同学的名字查找该同学的成绩,如果用数组实现,我们这么写:

var names = ["mickel", "bob", "tracy"];
var scores = [95, 97, 88];
复制代码

给定一个名字,要查找某个同学的成绩,就需要现在names数组中找到对应的位置,然后在scores中取出对应的成绩,数组越长,耗时越长。

如果我们现在用Map实现,只需要一个“名字-成绩”的对照表,不管这个表有多大,查询速度都不会变慢。

var m = new Map([['mickel', 95],['bob', 97],['tracy', 88]]);
var tracyScore = m.get('tracy');
console.log(tracyScore); //88
复制代码

初始化Map需要一个二维数组,或者直接初始化一个空的Map。Map具有以下方法:

var n = new Map();
n.set('adam', 80);
n.set('bob', 77);
console.log(n.has('adam')); //true
console.log(n.get('adam')); //80
n.delete('adam');
console.log(n.get('adam')); //undefined
复制代码

由于一个key只能对应一个vaule,所以对一个key放入value,后面的值会覆盖前面的值。

set和map类似,也是一组key的集合,但是不储存value.由于key不能重复,所以,在Set中,没有重复的值。

要创建一个Set,需要提供一个数组作为输入,或者直接创建一个空的Set:

var s1= new Set();
var s2 = new Set([1,3,2]);
console.log(s1) //Set {}
console.log(s2) //Set { 1, 3, 2 }
var s3 = new Set([1,2,3,4,45,6,3,'6']);
console.log(s3); //Set { 1, 2, 3, 4, 45, 6, '6' } 
复制代码

重复的元素会被过滤掉

通过 add(key) 方法可以添加元素到Set中。

s3.add(12);
console.log(s3) //Set { 1, 2, 3, 4, 45, 6, '6', 12 }  
复制代码

添加重复的元素不会有效果的

通过 delete(key) 方法可以删除元素:

s3.delete(1);
console.log(s3) //Set { 2, 3, 4, 45, 6, '6', 12 }
复制代码

##小结