道阻且长,行而不辍,未来可期
Map是键值对的集合,Map也实现了iterator接口,所以,可以使用【扩展运算符】和【for…of】进行遍历。
Map和Object的区别:
Object 的 key 必须是简单数据类型(整数,字符串或者是 symbol)Map的key可以是各种类型,包括对象都可以当做key
map的定义:
1、let map = new Map();
2、let map = new Map([[key,value],[key,value]]); //默认带初始化参数的定义
如果Map的key的简单类型,只要两个key相等,Map就会将其当成一个键,如果Map的key是复杂类型,则需要地址的引用相等,Map才会将其当成一个键。
示例:
const map = new Map([
[1, 2],
[3, 4]
])
console.log(map)//Map(2) { 1 => 2, 3 => 4 }
const mapTest = new Map([
[
"异火",
{
first: '青莲地心火',
second: '陨落心炎'
}
],
[
"伙伴",
{
first: '彩麟',
second: '紫研',
third: '林修崖'
}
],
[
"目的地",
{
first: '黑角域',
second: '云岚宗'
}
]
])
//将map转成对象
console.log(Object.fromEntries(mapTest));
const mapDemo = {
"type1": {
id: 1,
name: 'Red',
active: false,
},
"type2": {
id: 2,
name: 'Blue',
active: false,
},
"type3": {
id: 3,
name: 'Green',
active: false,
}
}
console.log(mapDemo)
//将Map转成数组
console.log([...mapTest.values()])
Map的属性和方法 | |
---|---|
size | 返回Map的元素个数 |
set | 增加一个新元素,返回当前Map |
get | 返回key的值 |
has | 检查Map中是否包含某个元素,返回boolean值 |
clear | 清空集合,返回undefined |
key() | 获取所有的Map键。它返回一个包含Map键的MapIterator对象。 |
values() | 获取所有的Map键的值。它返回一个包含Map键的值的MapIterator对象。 |
使用Map类型的对象,而不使用Map的原因
这个错误,说明Redux state中包含一个无法序列化的值,即在状态中存在一个Map的值,
Redux要求在进行持久化或状态传递时,所有的值都必须是可序列化的。
要解决这个问题,可以将Map转为普通对象。
Payload也不允许是无法序列化的值,所以,在派发dispatch之前,就需要将Map集合转为普通对象。