1.Map的基本使用
另外一个新增的数据结构是Map,用于存储映射关系(键值对)。
那么在之前可以使用对象来存储映射关系,它们有什么区别?
- 对象存储映射关系只能用字符串(ES6中新增了Symbol)作为属性名(key),即便使用了别的类型作为key,最终还是被转换成字符串类型。
- 某些情况下,希望可以通过其他类型作为key,比如对象,这个时候会自动将对象转成字符串来作为key,但是Map可以实现使用其他类型作为key。
// Map中不传入任何值
const obj1 = {
name: 'why' }
const obj2 = {
name: 'kobe' }
const map = new Map()
map.set(obj1, 'aaa')
map.set(obj2, 'bbb')
map.set(1,'ccc')
console.log(map);
// Map中传入数组
const obj1 = {
name: 'why' }
const obj2 = {
name: 'kobe' }
// 传入数组 必须是这种格式的
const map2 = new Map([[obj1, "aaa"], [obj2, "bbb"], [2, "ccc"]])
console.log(map2);
2.Map的常见的属性和方法
1)常见的属性
size:返回Map中元素的个数。
2)常见的方法
① set(key , value): 在Map中添加key , value,并且返回整个Map对象。
const obj1 = {
name: 'why' }
const obj2 = {
name: 'kobe' }
// 传入数组 必须是这种格式的
const map2 = new Map([[obj1, "aaa"], [obj2, "bbb"], [2, "ccc"]])
map2.set("whu", "eee")
console.log(map2);
② get(key) : 根据key获取Map中的value。
console.log(map2.get("whu"));
③ has(key) : 判断是否包括某一个key,返回Boolean类型。
console.log(map2.has("whu")); // true
④ delete(key): 根据key删除一个键值对,返回Boolean类型。
map2.delete("whu")
console.log(map2);
⑤ clear(): 清空所有的元素。
map2.clear()
⑥ forEach(callback, [, thisArg]) :通过forEach遍历Map。
const obj1 = {
name: 'why' }
const obj2 = {
name: 'kobe' }
// 传入数组 必须是这种格式的
const map2 = new Map([[obj1, "aaa"], [obj2, "bbb"], [2, "ccc"]])
map2.set("whu", "eee")
map2.forEach((item, key) => {
// item是值
console.log(item,key);
})
还可以使用for…of来遍历。
for (const item of map2) {
// item是一个数组
console.log(item[0],item[1]);
}
因为for…of中的item是数组,因此可以直接解构使用。
for (const [key, value] of map2) {
console.log(key,value);
}