Map and Set (映射和集合
Map
Map 是一个带键的数据项的集合,就好比Object,但是Map允许任何类型的键
new Map()
:创建新的mapmap.set(key,value)
:根据键存值map.get(key)
:根据键返回值,若不存在对应的key 则返回undefinedmap.has(key)
:若有key返回true 否则返回falsemap.delete(key)
: 删除指定key的值map.size
: 返回当前元素个数
举个例子💡:
let map = new Map();
map.set('key', '字符串键'); //字符串键
map.set(0, '数组键'); //数组键
map.set(true, '布尔值'); //布尔值
console.log(map);
返回值:
如我们所见,与对象不同,键可以为任何类型。
👣注意:
map[key]
不是使用map
的正确方法
- 虽然
map[key]
也有效,例如我们设置map[key] = 2
,这样会将map
视为js的的plain object,因此它暗含了所有相应的限制(无对象键等)
map的方法:set、get
Map还可以使用对象作为键
let XX = {name:"对象"};
//储存每个用户来访的次数
var viCountMap = new Map();
// XX 是Map的键,123作为值
viCountMap.set(XX,'123');
console.log(viCountMap.get(XX));
Map 迭代
如果要在 map 里使用循环,可以使用以下三个方法:( for…of 在默认情况下使用的就是这个)
- map.keys() —— 遍历并返回所有的键(returns an iterable for keys),
- map.values() —— 遍历并返回所有的值(returns an iterable for values),
- map.entries() —— 遍历并返回所有的实体(returns an iterable for entries)
Object.entries:从对象创建 Map
如果想从一个已有的普通对象来创建一个 Map,那么可以使用内建方法 Object.entries(obj),该返回对象的键/值对数组,该数组格式完全按照 Map 所需的格式。
Object.fromEntries
在 Map 中存储了一些数据,但是需要把这些数据传给需要普通对象(plain object)的第三方代码。Object.fromEntries就能从map中获取一个普通的对象
因为 Object.fromEntries 期望得到一个可迭代对象作为参数,而不一定是数组。并且 map 的标准迭代会返回跟 map.entries() 一样的键/值对。因此,我们可以获得一个普通对象(plain object),其键/值对与 map 相同。
Set —— 是一组唯一值的集合。
new Set([iterable])
—— 创建 set,可选择带有 iterable(例如数组)来进行初始化。set.add(value)
—— 添加一个值(如果 value 存在则不做任何修改),返回 set 本身。set.delete(value)
—— 删除值,如果 value 在这个方法调用的时候存在则返回 true ,否则返回 false。set.has(value)
—— 如果 value 在 set 中,返回 true,否则返回 false。set.clear()
—— 清空 set。set.size
—— 元素的个数。