ES6中的Map集合

ES6中的Map类型是一种存储着许多键值对的有序列表。其中最为重要的是:Map集合的键名和值支持任意类型的数据

基本语法

// 创建map对象
let map = new Map(); 
// set() 设置键值对
map.set('title', 'map title');
// get() 获取键对应的值, 不存在则返回undefined
map.get('title'); // map title

对与Map集合的基础语法很简单,这里我们需要注意一点是,因为Map集合内支持所有的数据类型,所以我们可以这么做:

let map  = new Map();
let obj1 = {};
let obj2 = {};
map.set(obj1, 1);
map.set(obj2, 2);
// 获取值
map.get(obj1); // 1
map.get(obj2); // 2

这里,我们定义了两个空对象(虽然看起一样,但是完全是两个不同的东西),并将这两个对象作为键名,分别赋值1和2,然后通过get方法去获取刚刚设置的值。整个过程是完全合法的,这在对象中是无法实现的。

当然,这里通过定义一个变量来指向了对应的变量,如果你尝试直接map.set({}, 1)的形式来定义,然后通过map.get({})是无论如何都拿不到的。

到这里,相信我们已经见识到了Map集合确实可以设置任意类型的数据,换句话说,我们以后不再需要修改对象本身就可以为其添加一些附加信息。

Map集合的其他方法

和Set集合一样,Map集合中也有3个通用的方法, 直接看代码:

let map = new Map();
// has(key): 检测键名是否存在
map.has('title');
// delete(key): 删除指定的键名和其值
map.delete('title');
// clear(): //清空所有键值对
map.clear();

除了上面的三个方法,Map集合还有一个size属性,用于表明集合中的键值对数量,可以理解成数组中的length属性。

批量添加

我们知道通过set方法可以为Map集合 添加键值对,但是每添加一次都要写一次set,未免太过麻烦。幸运的是,Map支持批量初始化数据,如同初始化对象和数组一样。

// 通过传入一个二维数组来批量初始化
// let map = new Map([['键名', '值'], ['键名', '值']]);
let map = new Map([['name', 'hxc'], ['age', '22']]);
map.get('name'); //hxc
map.get('age'); // 22

虽然第一眼看起来可能比较混乱,其实理清了很容易理解。批量初始化的时候,我们需要传递一个数组,数组中又包含着多个子数组,子数组中元素个数始终为2,第一个元素为键名,第二个元素为值

之所以这么设计,是因为Map集合支持所有的数据类型,这样做就是为了正确的去初始化数据。

forEach() 方法

Map集合也支持forEach方法,分别接收3个参数:

  • 集合中下一次索引的位置
  • 键名
  • map集合本身

forEach本身并无发杂的语法,这里我们需要知道的是,在遍历过程中,会按照数据插入到Map集合中的先后顺序来遍历,而在数组中,则是按照索引位置。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352

推荐阅读更多精彩内容