[TOC]
Map
在Map这种数据类型里面,我们可以使用各种数据类型作为Map的键名,打破了之前对象只能使用一部分数据类型作为键名的限制。
创建Map
Map不是一种原始数据类型,所以我们需要使用new关键字来创建,在创建Map数据类型的时候,需要将Map大写。
1 | let m = new Map(); |
就像这样,我们创建出了Map对象。
Map的增删改查
给Map对象赋值
给Map对象赋值,我们使用set方法,并且这个方法返回的是Map对象本省,所以如果需要对Map对象赋多个值,我们可以链式赋值。
就像这样:
1 | p.set("2", "q") |
我们这样就给Map对象赋值了三个。
获取Map对象指定key的value
通过get方法可以获取到指定键名的值,map.get(键名)就可以得到对应的值,如果不存在该key,那么就返回undefined。
1 | p.get("2"); // "q" |
判断Map对象是否拥有这个key
我们使用has(key)方法来判断Map对象是否拥有这个key,如果存在那么返回true,如果不存在就返回false。
例如:
1 | p.has("2"); // true |
删除Map对象指定的键名及其数据
我们可以使用delete(key)来删除我们指定的key的数据。
1 | p.delete("2"); // 删除key值为“2”的元素 |
清空整个Map
我们使用clea()r直接将这个Map清空。
1 | p.clear(); |
获取整个Map的长度
我们使用size属性来获取Map的数据长度。
1 | let count = p.size; |
Map迭代
在Map中,我们可以直接使用for of变量,但是这样遍历的结果是数组形式的。
如果我们需要一些其他的遍历。
这里有三种方法:
- map.keys():返回一个包含所有键的可遍历对象
- map.value():返回一个包含所有值(value)的可遍历对象
- map.enties():返回一个包含所有实体([key:value])的可遍历对象
我们举一个例子:
1 | let mp = new Map(); |
最后运行结果:
1 | 1 |
注意:
在Map中,遍历的顺序适合我们插入值的顺序是有关的,也就是说遍历Map是按照插入顺序进行遍历的。这一点也与Object不同。
从对象创建Map
在创建Map的时候,我们可以给Map传入一个数组的参数,里面包含一些键值对的数组。就像这样:
1 | let mp = new Map([ |
这样创建出来的Map就已经初始化了。
在对象中有这样一个方法:Object.entries(对象)这个方法可以将对象里面的每一个元素都转换为键值对的数组,并且返回一个数组,我们可以利用这个方法将对象转换为Map。
1 | var obj = { |
从Map创建对象
前面我们使用Object.entries(obj)的方法创建了对象,我们现在可以使用Object.fromEntries(arr)来创建对象。
Object.fromEntries(arr)需要传入的参数是一个键值对的数组。就类似于这样的:[[q:w],[e:r],[t:y]]。
这样的格式是不是很眼熟,是的,我们在Map中使用map.entries()得到的结果就是这样的。
所以从Map创建对象,我们可以这样做:
1 | let mp1 = new Map(); |