概念: 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
初识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