概念: 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
初识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")); // 100 console.log(m1.delete("test")); // true console.log(m1.has("test")); // false console.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: Nathan age: 100 [object Object]: WUXI */ m1.forEach((item, index) => { console.log(item, index); }) /* Nathan name 100 'age' WUXI {a: 1} */
参考: 014-ES6-Map数据结构_哔哩哔哩_bilibili