# Map


Map(es6)是对es5中Object的一种拓展,也是以键值对的形式存储数据。但是在Map中,任何值(对象或者原始值)都可以作为一个键或者一个值。其中MapObject的差别如下表。

对比项 Object Map 备注
键的类型 字符串 任意值(包括array, object, function,基本类型)
键的顺序 无序 有序,按照键插入的顺序排序
获取大小 便利所有键手动计算 调用Map.size
迭代 先获取key,再获取值 可以直接迭代

下面是map的基本用法:

#

var myMap = new Map();
var keyObj  = {};
var keyFunc = function(){};
var keyStr  = 'uncle-yang';

// add key
myMap.set(keyObj, 'key object');
myMap.set(keyFunc, 'key function');
myMap.set(keyStr, 'key string');

// get size
console.log(myMap.size); // 3

// 判断map中,是否有值
console.log(myMap.has(keyObj)); // true
console.log(myMap.has({})); // false

// 获取值
console.log(myMap.get(keyObj)); // 'key object'
console.log(myMap.get(keyFunc)); // 'key function'
console.log(myMap.get(keyStr)); // 'key string'

console.log(myMap.get({})); // undefined, 这里是个新的对象,和keyObj是两个不同的对象,在内存中有着不同的空间
console.log(myMap.get(function(){})); // undefined, 原因同上
console.log(myMap.get('uncle-yang')); // 'key string'


// 查看Map中的所有的key
var keys = myMap.keys();
console.log(keys.next().value); // {}
console.log(keys.next().value); // function(){}
console.log(keys.next().value); // 'uncle-yang'

// 查看Map中的所有的value
var values = myMap.values();
console.log(values.next().value); // 'key object'
console.log(values.next().value); // 'key functin'
console.log(values.next().value); // 'key string'

//以数组的方式获取map中的键值对
var mapIter = myMap.entries();
console.log(mapIter.next().value); // [{}, 'key object']
console.log(mapIter.next().value); // [function(){}, 'key functin']
console.log(mapIter.next().value); // ['uncle-yang', 'key string']

// 循环遍历
myMap.forEach((value, key, map)=>{
    console.log(key); // 依次输出: {}, function(){}, 'uncle-uang'
    console.log(value); // 依次输出:'key object','key functin','key string'
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

#

var myMap = new Map();
myMap.set('name', 'uncle-yang');
console.log(myMap.get('name')); // 'uncle-yang'

//更改
myMap.set('name', '大叔·杨');
console.log(myMap.get('name')); // 'name'
1
2
3
4
5
6
7

#

var myMap = new Map();
var keyObj  = {};
var keyFunc = function(){};
var keyStr  = 'uncle-yang';

// add key
myMap.set(keyObj, 'key object');
myMap.set(keyFunc, 'key function');
myMap.set(keyStr, 'key string');
1
2
3
4
5
6
7
8
9

#

var myMap = new Map();
var keyStr  = 'uncle-yang';

// add key
myMap.set(keyStr, 'key string');

// 添加一个值
myMap.set('temp', 'abc');
console.log(myMap.get('temp')); // 'abc'

//删除这个key
myMap.delete('temp');
console.log(myMap.has('temp')); // false
console.log(myMap.get('temp')); // undefined


// 清空map所有的键值对
myMap.clear();

console.log(myMap.size); // 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
上次更新: 3/4/2019, 2:51:29 PM