Map 是JavaScript中的数据结构,它允许存储【键,值】对,其中任何值都可以用作键或值;Map集合中的键和值可以是任何类型,并且如果使用集合中已存在的键将值添加到Map集合中,新值将替换旧值。

map()方法 返回一个新数组,数组中的元素为原始数组调用函数处理后的值,并且按照原始数组元素调用函数处理后的值

Map.has()方法 该方法主要用来检查Map中是否存在具有制定键的元素

Map.set()方法 为Map对象添加一个指定键(key)和值(value)的新元素 Map.get(key)方法 用来获取一个Map对象指定的元素,返回的是键所对应的值,如果不存在则会返回undefined

  • JSON.stringify()无法转化ES6中map数据问题

JSON与字符串的转换

// Json转换为字符串
 /**
  *
  * json转字符串
  */
  static stringToJson(data){
    return JSON.parse(data);
  }



// 字符串转JSON
  /**
  *字符串转json
  */
  static jsonToString(data){
    return JSON.stringify(data);
  }

Map与Json的转换

  • Map不能直接转换为Json,Map先要转换为Object,在转换为json。Json转换为Map也不能直接转换,json转为对象,在转换为Map。

Map转换为Json

/**
 *map转化为对象(map所有键都是字符串,可以将其转换为对象)
 */
 static strMapToObj(strMap){
    let obj= Object.create(null);
    for (let[k,v] of strMap) {
      obj[k] = v;
    }
    return obj;
  }
  /**
  *map转换为json
  */
  static mapToJson(map) {
  return JSON.stringify(JsonUitl.strMapToObj(map));
  }

 Json转换为Map
/**
*对象转换为Map
*/
static   objToStrMap(obj){
  let strMap = new Map();
  for (let k of Object.keys(obj)) {
    strMap.set(k,obj[k]);
  }
  return strMap;
}
 /**
  *json转换为map
  */
  static jsonToMap(jsonStr){
    return  JsonUitl.objToStrMap(JSON.parse(jsonStr));
  }
 
> let myMap = new Map().set('yes', true).set('no', false);
> mapToJson(myMap)
'{"yes":true,"no":false}'
> jsonToMap('{"yes":true,"no":false}');
Map {'yes' => true, 'no' => false}

Map与数组的转换

//Map转为数组
let myMap = new Map().set(true, 7).set({foo: 3}, ['abc']);
> [...myMap]
[[true, 7], [Object { foo=3}, ["abc"]]]

// 数组转为Map
new Map([[true, 7], [{foo: 3}, ['abc']]])
Map {true => 7, Object {foo: 3} => ['abc']}