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
原文:https://www.cnblogs.com/xjy20170907/p/12681950.html