es6 — map2 - 2019-01-10

  • 2019-01-10 创建

Map 属性

size返回Map结构的成员个数

Map方法

1. set(key, value)

设置key所对应的键值,然后返回整个Map结构,如果key的值存在,就更新,否则生成新的键值。
因为他返回的是Map本身,所以可以采用链式写法

let map = new Map().set(1, 'a').set(2, 'b').set(3, 'c');
console.log(map.size);  // 3

扩展:链式调用的原理——执行完一个方法之后返回本身,然后被返回的对象继续执行后面的方法

2. get(key):读取key对应的value,如果没有,返回undefined

3. has(key):返回布尔值,某个键是否存在于Map结构中

4. delete(key):删除某个键,返回true,如果删除失败,返回false

5. clear()方法清除所有成员,没有返回值

let map = new Map().set(1, 'a').set(2, 'b').set(3, 'c');
console.log(map.size);  // 3
map.clear();
console.log(map.size);  // 0

遍历方法

1. keys(): 键的遍历

2. values(): 值的遍历

3. entries(): 键值对的遍历

4. let ... of [...]: 使用回调函数遍历每个成员

let map = new Map([[1,1],[2,3]]);   // Map只可以接受数组作为参数(二维),Set只接受数组做参数(一维)

for(let i of map.keys()){
    console.log(i); // 1 2
}

for(let i of map.values()){
    console.log(i); // 1 3
}

for(let i of map.entries()){
    console.log(i[0],i[1]); // 1 1   2 3
}

for(let i of map){
    console.log(i[0],i[1]); // 1 1   2 3
}

从上面的例子可以看出:Map默认的遍历方式是key--value。Set默认的遍历方式是value

数据结构转换

1. Map结构转化为数组结构方法——扩展运算符

let map = new Map([[1,1],[2,3]]);
console.log([...map.keys()]);   // [1,2]
console.log([...map.values()]); // [1,3]
console.log([...map.entries()]);// [[1,1],[2,3]]
console.log([...map]);  // [[1,1],[2,3]]

2. 数组转换为Map结构——将数组传入Map构造函数

let map = new Map([[1,1],[2,3]]);
console.log(map);   // Map(2) {1 => 1, 2 => 3}

3. Map转为对象——如果Map的所有键都是字符串,才可以将其转为对象

function strMapToObj(strMap) {
  let obj = Object.create(null);
  for (let [k,v] of strMap) {
    obj[k] = v;
  }
  return obj;
}
let myMap = new Map().set('yes', true).set('no', false);
console.log(strMapToObj(myMap));
// { yes: true, no: false }

4. 对象转为Map

function objToStrMap(obj) {
  let strMap = new Map();
  for (let k of Object.keys(obj)) {
    strMap.set(k, obj[k]);
  }
  return strMap;
}
var a = {yes: true, no: false}
console.log(objToStrMap(a))
// [ [ 'yes', true ], [ 'no', false ] ]

Map转为JSON

json 对象

function strMapToObj(strMap) {
  let obj = Object.create(null);
  for (let [k,v] of strMap) {
    obj[k] = v;
  }
  return obj;
}
function strMapToJson(strMap1) {
  return JSON.stringify(strMapToObj(strMap1));
}
let myMap2 = new Map().set('yes', true).set('no', false);
console.log(strMapToJson(myMap2));
// '{"yes":true,"no":false}'

json 数组

function mapToArrayJson(map) {
  return JSON.stringify([...map]);
}
let myMap = new Map().set(true, 7).set({foo: 3}, ['abc']);
mapToArrayJson(myMap)
console.log(mapToArrayJson(myMap))
// '[[true,7],[{"foo":3},["abc"]]]'

6. JSON转为Map——正常情况下所有键名都是字符串

json对象

function objToStrMap(obj) {
  let strMap = new Map();
  for (let k of Object.keys(obj)) {
    strMap.set(k, obj[k]);
  }
  return strMap;
}
function jsonToStrMap(jsonStr) {
  return objToStrMap(JSON.parse(jsonStr));
}
 
jsonToStrMap('{"yes":true,"no":false}')
console.log(jsonToStrMap('{"yes":true,"no":false}'))
// Map {'yes' => true, 'no' => false}

josn 数组

function jsonToMap(jsonStr) {
  return new Map(JSON.parse(jsonStr));
}
 
jsonToMap('[[true,7],[{"foo":3},["abc"]]]')
console.log(jsonToMap('[[true,7],[{"foo":3},["abc"]]]'))
// Map {true => 7, Object {foo: 3} => ['abc']}

你可能感兴趣的:(es6 — map2 - 2019-01-10)