Abo

Map与数组的关系

Map与数组转换

1
2
3
4
5
6
7
8
9
10
11
12
var kvArray = [["key1", "value1"], ["key2", "value2"]];

// 使用常规的Map构造函数可以将一个二维键值对数组转换成一个Map对象
var myMap = new Map(kvArray);

myMap.get("key1"); // 返回值为 "value1"

// 使用Array.from函数可以将一个Map对象转换成一个二维键值对数组
console.log(Array.from(myMap)); // 输出和kvArray相同的数组

// 或者在键或者值的迭代器上使用Array.from,进而得到只含有键或者值的数组
console.log(Array.from(myMap.keys())); // 输出 ["key1", "key2"]

business-1031754_1280

复制或者合并Maps

Map 能像数组一样被复制:

1
2
3
4
5
6
7
8
var original = new Map([
[1, 'one']
]);

var clone = new Map(original);

console.log(clone.get(1)); // one
console.log(original === clone); // false. Useful for shallow comparison

请记住,数据本身未被克隆。

Map对象间可以进行合并,但是会保持键的唯一性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var first = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);

var second = new Map([
[1, 'uno'],
[2, 'dos']
]);

// 合并两个Map对象时,如果有重复的键值,则后面的会覆盖前面的。
// 展开运算符本质上是将Map对象转换成数组。
var merged = new Map([...first, ...second]);

console.log(merged.get(1)); // uno
console.log(merged.get(2)); // dos
console.log(merged.get(3)); // three

Map对象也能与数组合并:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var first = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);

var second = new Map([
[1, 'uno'],
[2, 'dos']
]);

// Map对象同数组进行合并时,如果有重复的键值,则后面的会覆盖前面的。
var merged = new Map([...first, ...second, [1, 'eins']]);

console.log(merged.get(1)); // eins
console.log(merged.get(2)); // dos
console.log(merged.get(3)); // three