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