JS-Map与react-toolkit

道阻且长,行而不辍,未来可期

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: '云岚宗'
    }
  ]
])

JS-Map与react-toolkit_第1张图片

//将map转成对象
console.log(Object.fromEntries(mapTest));

JS-Map与react-toolkit_第2张图片
所以,手写一个Map

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)

JS-Map与react-toolkit_第3张图片
将Map转成数组

//将Map转成数组
console.log([...mapTest.values()])

JS-Map与react-toolkit_第4张图片

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集合转为普通对象。

你可能感兴趣的:(javascript,前端)