Object结构提供了"字符串——值"
Map结构提供了"值——值"的对应,是一种更完善的Hash结构实现
const m = new Map();
const o = {
p : 'Hello World'
};
m.set(o, 'content');
console.log(m.get(o),
"has=>",m.has(o),
"delete=>",m.delete(o),
"has=>",m.has(o));
const map = new Map([
['name' , 'hejie'],
['title' , '设计模式']
]);
console.log(map.size,map.get('title'));
map.set("age","20").set("city","陕西");
console.log(map.get('age'),map.has('city'));
方法
和之前一样
keys(),values(),entries(),forEach()
for(let [key,value] of map.entries()){
console.log(key,"---",value);
}
for(let [key,value] of map){
console.log(key,"---",value);
}
扩展运算符…
const map2 = new Map([
[1 , 'one'],
[2 , 'two'],
[3, 'three']
]);
console.log(...map2.keys(),...map2.values(),...map2.entries(),...map2);
const map3 = new Map()
.set(1 , 'a')
.set(2 , 'b')
.set(3 , 'c');
const map4 = new Map([...map3].filter(([k,v]) => k > 2));
const map5 = new Map([...map3].map(([k,v]) => [k + 1,"_" + v + "_"]));
console.log(map4 ,map5);
Map与其他数据结构的相互转换
const myMap = new Map()
.set(true , 7)
.set({
foo : 3} , ['abc'])
console.log(...myMap);
const arr = [...myMap];
console.log(new Map(arr));
const {
create , keys } = Object;
strMapToObj = (strMap) => {
let obj = create(null);
for(let [k,v] of strMap){
obj[k] = v;
}
return obj;
}
const obj = strMapToObj(myMap);
console.log(obj);
objToStrMap = (obj) => {
let strMap = new Map();
for(let k of keys(obj)){
strMap.set(k , obj[k]);
}
return strMap;
}
console.log(objToStrMap(obj));
const {
stringify , parse } = JSON;
strMapToJson = (strMap) => {
return stringify(strMapToObj(strMap));
}
let json = strMapToJson(myMap);
console.log(json);
另一种情况是Map的键名有非字符串,可以选择转为数组JSON
mapToArrayJson = (map) => {
return stringify([...map]);
}
let json2 = mapToArrayJson(myMap);
console.log(json2);
正常情况下所有键名都是字符串
jsonToStrMap = (jsonStr) => {
return objToStrMap(parse(jsonStr));
}
const map1 = jsonToStrMap(json);
const map2 = jsonToStrMap(json2);
console.log(map1,map2);
整个JSON是一个数组,数组转JSON逆操作
jsonToMap = (jsonStr) => {
return new Map(parse(jsonStr));
}
// const map3 = jsonToMap(json);
const map4 = jsonToMap(json2);
console.log(map4);