概念: 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

初识Map

let m1 = new Map([["name", "Nathan"],["age", 100],[{a:1}, "WUXI"]])console.log(m1); // Map(3){'name' => 'Nathan', 'age' => 100, {…} => 'WUXI'}let m2 = new Map()m2.set("name", "Nathan")m2.set("age", 100)m2.set({a:1}, "WUXI")console.log(m2); // Map(3){'name' => 'Nathan', 'age' => 100, {…} => 'WUXI'}

实例的属性和方法

size:返回 Map 结构的成员总数。

Map.prototype.set(key,value):添加key对应的value,返回 Map 结构本身。

Map.prototype.get(key):获取key对应的value

Map.prototype.delete(key):删除某个键(键名+键值), 返回true或者false

Map.prototype.has(key):某个键是否在当前 Map 对象之中, 返回true或者false

Map.prototype.clear():清除所有成员,没有返回值。

let m1 = new Map([["name", "Nathan"],["age", 100],[{a:1}, "WUXI"]])console.log(m1); // Map(3){'name' => 'Nathan', 'age' => 100, {…} => 'WUXI'}console.log(m1.set("test", 100)); // Map(4){'name' => 'Nathan', 'age' => 100, {…} => 'WUXI', 'test' => 100}console.log(m1.get("age")); // 100console.log(m1.delete("test")); // trueconsole.log(m1.has("test")); // falseconsole.log(m1); // Map(3){'name' => 'Nathan', 'age' => 100, {…} => 'WUXI'}m1.clear()console.log(m1);

遍历

Map.prototype.keys():返回键名的遍历器。

Map.prototype.values():返回键值的遍历器。

Map.prototype.entries():返回所有成员的遍历器。

Map.prototype.forEach():遍历 Map 的所有成员。

let m1 = new Map([["name", "Nathan"],["age", 100],[{a:1}, "WUXI"]])for(let i of m1.keys()) {console.log(i); // name age {a: 1}}for(let i of m1.values()) {console.log(i); // Nathan 100 WUXI}for(let [index, item] of m1.entries()) {console.log(index + ': ' + item); }for(let [index, item] of m1) { // m1和m1.entries()的迭代器是同一个迭代器console.log(index + ': ' + item); } /*name: Nathanage: 100[object Object]: WUXI*/m1.forEach((item, index) => {console.log(item, index);})/*Nathan name100 'age'WUXI {a: 1}*/

参考: 014-ES6-Map数据结构_哔哩哔哩_bilibili