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']}