SOURCE

//  Map 是一个带键的数据项的集合,就像一个Object一样。但是最大的区别是Map允许任何类型的键
let map = new Map()

// 一、Map的实例方法
// ①、map.size  返回当前元素个数
// ②、map.set(key,value)  根据键存储值,返回的是map结构本身,可以链式调用
map.set('name','iu')     // 字符串类型的键
map.set('name','lisa')   //  重复声明,后面的会覆盖前面的 
map.set(1,'iu')          // 数字类型的键
map.set(true,'boolean')  // 布尔值类型的键

// ③、map.get(key)   根据键来返回值,如果map中不存在对应的key,则返回 undefined
console.log(map.get('name'))  // lisa

// ④、map.has(key)  如果key存在,则返回true,如果不存在则返回false
console.log(map.has('name'))  // true

// ⑤、map.delete  删除map对象中对应的key,返回一个布尔值表示是否删除成功
console.log(map.delete(1),'--->delete')   // true

// ⑥、map.clear()  清空map,没有返回值
map.clear()

// 注: Map的键的比较方法类似于严格相等,且Map的对象键只是单纯的引用


console.log(map)
console.log(map.size)

// 二、Map的遍历方法 (Map的遍历顺序就是值的插入顺序)
let map1 = new Map()
map1.set('name','iu')
map1.set('age',17)
map1.set('isGender',false)

// ①、map.keys 返回键
for(let val of map1.keys()) {
    console.log(val)   // name  age  isGender
}

// ②、map.values 返回键的值
for(let val of map1.values()) {
    console.log(val) // iu  17  false
}

// ③、map.entries 返回一个由键值对组成的数组
for(let val of map1.entries()) {
    console.log(val) // ['name','iu'] ['age',17] ['isGender',false]
}

// ④、foreach 遍历
map1.forEach( (item,index)=>{
    console.log(index,item)  // name,iu  age,17  isGender,false
})


console.log(map1.size)

// 三、map与其他结构的互相转换

// ①、Map转为数组 通过扩展运算符
let mapArr = new Map().set('name','iu').set(true,7)
console.log([...mapArr])  // [["name","iu"],[true,7]]

// ②、数组转为Map 在创建Map实例的时候,将数组作为参数传入即可生成Map
console.log(new Map([[1,2],[true,999]]))  // Map(2) {1 => 2, true => 999}

// ③、Map转为对象  Object.fromEntries(map)
// 方法一、
// function strMapToObj(strMap) {
//   let obj = Object.create(null); // 创建一个没有 __proto__ 的空对象
//   for (let [k,v] of strMap) {
//     obj[k] = v;
//   }
//   return obj;
// }
// 方法二、 Object.fromEntries(map)
console.log(Object.fromEntries([ ['name','lisa'],[1,1] ])) //  {"1":1,"name":"lisa"}

// ④、对象转为Map Object.entries(object)
console.log(Object.entries({"name":'lisa',age:13})) // [["name","lisa"],["age",13]]

// ⑤、Map转为 JSON格式数据
// 当Map的键都是字符串时,转为对象类JSON
function strMapToJson(strMap) {
    // 先通过Object.fromEntries(map)将Map转为对象,再通过JSON.stringify将对象转为JSON字符串
  return JSON.stringify(Object.fromEntries(strMap));
}
let myMap = new Map().set('yes', true).set('no', false);
console.log(strMapToJson(myMap))  // {"yes":true,"no":false}
// 当Map的键含有其他类型的数据时,需要转为数组类JSON
function mapToArrayJson(map) {
   return JSON.stringify([...map])
}
let myMap1 = new Map().set(true,1).set(1,2)
console.log(mapToArrayJson(myMap1))  // [[true,1],[1,2]]

// ⑥、JSON格式数据转为Map(正常情况下JSON格式数据都是字符串)
// 先用 JSON.parse()将JSON字符串转为对象,再通过Object.entries将对象转为Map
console.log(Object.entries(JSON.parse('{"name":"yoona","age":"13"}'))) // [["name","yoona"],["age","13"]]
console 命令行工具 X clear

                    
>
console