【九】Map和Set

JavaScript的默認對象表示方式{ } 可以視為其他語言中的Map或Dictionary的數(shù)據(jù)結(jié)構(gòu),即一組鍵值對吆玖。
但是JavaScript的對象有個小問題,就是鍵必須是字符串痒谴。但實際上Number或者其他數(shù)據(jù)類型作為鍵也是非常合理的衰伯。
為了解決這個問題,最新的ES6規(guī)范引入了新的數(shù)據(jù)類型Map积蔚。要測試你的瀏覽器是否支持ES6規(guī)范意鲸,請執(zhí)行以下代碼,如果瀏覽器報ReferenceError錯誤尽爆,那么你需要換一個支持ES6的瀏覽器:

'use strict'
var m = new Map();
var s = new Set();
alert('你的瀏覽器支持Map和Set!')怎顾;

</br>

Map

Map是一組鍵值對的結(jié)構(gòu),具有極快的查找速度漱贱。
舉個例子槐雾,假設(shè)要根據(jù)同學(xué)的名字查找對應(yīng)的成績,如果用Array實現(xiàn)幅狮,需要兩個Array:

var names = ['Michael', 'Bob', 'Tracy'];
var scores = [95, 75, 85];

給定一個名字募强,要查找對應(yīng)的成績,就先要在names中找到對應(yīng)的位置崇摄,再從scores取出對應(yīng)的成績擎值,Array越長,耗時越長逐抑。
如果用Map實現(xiàn)鸠儿,只需要一個"名字"-"成績"的對照表,直接根據(jù)名字查找成績厕氨,無論這個表有多大进每,查找速度都不會變慢。用JavaScript寫一個Map如下:

var m = new Map([['Michael', 95],['Bob', 75], ['Tracy'], 85]);
m.get('Michael');  //95

初始化Map需要一個二維數(shù)組命斧,或者直接初始化一個空Map田晚。Map具有以下方法:

var m = new Map();   // 空Map
m.set('Adam', 67);  // 添加新的key-value
m.set('Bob', 59);  
m.has('Adam');  // 是否存在key 'Adam': ture
m.get('Adam');  // 67
m.delete('Adam');  // 刪除key 'Adam'
m.get('Adam');  // undefined

由于一個key只能對應(yīng)一個value,所以冯丙,多次對一個Key放入value肉瓦,后面的值會把前面的值沖掉:

var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam');  // 88

</br>

Set

Set和Map類似,也是一組key的集合胃惜,但不存儲value泞莉,由于Key不能重復(fù),所以在Set中船殉,沒有重復(fù)的key鲫趁。
要創(chuàng)建一個Set,需要提供一個Array作為輸入利虫,或者直接創(chuàng)建一個空Set:

var s1 = new Set();  // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3

重復(fù)元素在Set中自動被過濾:

var s = new Set([1, 2, 3, 3, '3']);
s; // Set{1, 2, 3, '3'}

注意數(shù)字3和字符串‘3’是不同的元素挨厚。
通過add(key)方法可以添加元素到Set中堡僻,可以重復(fù)添加,但不會有效果:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通過delete(key)方法可以刪除元素:

var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疫剃,一起剝皮案震驚了整個濱河市钉疫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巢价,老刑警劉巖牲阁,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異壤躲,居然都是意外死亡城菊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門碉克,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凌唬,“玉大人,你說我怎么就攤上這事漏麦】退埃” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵撕贞,是天一觀的道長霎挟。 經(jīng)常有香客問我,道長麻掸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任赐纱,我火速辦了婚禮脊奋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疙描。我一直安慰自己诚隙,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布起胰。 她就那樣靜靜地躺著久又,像睡著了一般。 火紅的嫁衣襯著肌膚如雪效五。 梳的紋絲不亂的頭發(fā)上地消,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音畏妖,去河邊找鬼脉执。 笑死,一個胖子當(dāng)著我的面吹牛戒劫,可吹牛的內(nèi)容都是我干的半夷。 我是一名探鬼主播婆廊,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巫橄!你這毒婦竟也來了淘邻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤湘换,失蹤者是張志新(化名)和其女友劉穎宾舅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枚尼,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡贴浙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了署恍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崎溃。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盯质,靈堂內(nèi)的尸體忽然破棺而出袁串,到底是詐尸還是另有隱情,我是刑警寧澤呼巷,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布囱修,位于F島的核電站,受9級特大地震影響王悍,放射性物質(zhì)發(fā)生泄漏破镰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一压储、第九天 我趴在偏房一處隱蔽的房頂上張望鲜漩。 院中可真熱鬧,春花似錦集惋、人聲如沸孕似。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喉祭。三九已至,卻和暖如春雷绢,著一層夾襖步出監(jiān)牢的瞬間泛烙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工习寸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胶惰,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓霞溪,卻偏偏與公主長得像孵滞,于是被迫代替她去往敵國和親中捆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1. 字符串 ASCII字符可以以\#XX形式的十六進制表示坊饶,例如: 還可以用\u####表示一個Unicode字...
    6ebb5d08123d閱讀 563評論 0 1
  • 基本語法語句注釋 數(shù)據(jù)類型和變量數(shù)據(jù)類型Number字符串布爾值數(shù)組對象變量strict模式 字符串多行字符串 數(shù)...
    染微言閱讀 316評論 0 1
  • 本文是大神廖雪峰的JavaScript教程學(xué)習(xí)筆記泄伪。并不是教程,如有需要匿级,請前往廖雪峰大神大博客. 一蟋滴、數(shù)據(jù)類型和...
    0o凍僵的企鵝o0閱讀 442評論 0 4
  • JavaScript的默認對象表示方式{}可以視為其他語言中的Map或Dictionary的數(shù)據(jù)結(jié)構(gòu)津函,即一組鍵值對...
    阿爾法乀閱讀 185評論 0 0
  • 文章最后說:你對未來世界的判斷行施,其實是關(guān)于生涯教育最重要的話題允坚。文章用大量的文字講了“未來的世界到底是個怎樣的世界...
    寶寶靈閱讀 970評論 0 0