es6的map

Javascript的Object本身就是键值对的数据结构,但实际上属性和值构成的是”字符串-值“对,属性只能是字符串

map是ES6提供的”值-值“对的数据结构,键名不仅可以是字符串,也可以是对象等:

const map = new Map();
const objkey = {p1: 'v1'}
map.set(objkey, 'hello');
console.log(map.get(objkey));   // 'hello'

map.set('k1', 6);        // 键是字符串
map.set(222, '哈哈哈');     // 键是数值
map.set(undefined, 'gagaga');    // 键是 undefined

const fun = function() {console.log('hello');}
map4.set(fun, 'fun');   // 键是 function

map4.set('k2', 2).set('k3', 4).set('k4', 5);   // 链式调用

Map可以接受数组作为参数,数组成员还是一个数组,里面的数组有两个元素,一个表示键一个表示值

const map = new Map([
  ['name', 'Aissen'],
  ['age', 12]
]);
console.log(map.get('name'));   // 'Aissen'
console.log(map.get('age'));   // 12

size同Set的size

has同Set的has

delete和clear同Set的delete和clear

get

const map5 = new Map();
map5.set('k1', 6); 
console.log(map.get('k1'));   // 6

map.keys

const map = new Map();
map.set('k1', 1);
map.set('k2', 2);
map.set('k3', 3);
console.log(map.keys());   // {"k1", "k2", "k3"}

map.values()

const map9 = new Map();
map9.set('k1', 1);
map9.set('k2', 2);
map9.set('k3', 3);
console.log(map9.values());   // {1 2 3}

map.entries()

const map9 = new Map();
map9.set('k1', 1);
map9.set('k2', 2);
map9.set('k3', 3);
console.log(map9.entries());   // {"k1" => 1, "k2" => 2, "k3" => 3}

转化成数组

const map = new Map();
map.set('k1', 1);
map.set('k2', 2);
map.set('k3', 3);
console.log([...map]);   // [ [ 'k1', 1 ], [ 'k2', 2 ], [ 'k3', 3 ] ]

set转换成map

const set = new Set([
  ['foo', 1],
  ['bar', 2]
]);
const map = new Map(set);
console.log(map);   // Map { 'foo' => 1, 'bar' => 2 }

map转换成set

function mapToSet(map) {
  let set = new Set();
  for (let [k,v] of map) {
    set.add([k, v]);
  }
  return set;
}

const map = new Map()
  .set('k1', 1)
  .set({pa:1}, 2);
console.log(mapToSet(map));   // Set { [ 'k1', 1 ], [ { pa: 1 }, 2 ] }

原文:https://www.cnblogs.com/kongxianghai/p/7309735.html

猜你喜欢

转载自www.cnblogs.com/xjy20170907/p/12681950.html