啥時候應當使用ES6 Map汉操?

你可能問,都2021年了蒙兰,咋還在討論Map基礎磷瘤?這不是Vue 3.0來了么,2021年就可以上生產了癞己,Vue 2.0可以遍歷Map膀斋,但是不支持響應式,現(xiàn)在3.0支持Map的響應式了痹雅,你說要不要開始學呢仰担?

廢話不說,跟Object做個對比绩社。

Map優(yōu)勢方面

Map Object
key類型 任意類型 String 或 Symbol
長度 .size直接得出 遍歷或Object.keys().length得出
頻繁增刪鍵值對 性能好 性能差
屬性純凈度 純凈 可能與原型鏈上的屬性沖突
支持forEach循環(huán)或for...of...循環(huán) 支持 不支持
屬性排序 按插入順序 不確定的順序

Map劣勢方面

Map Object
可被JSON.stringify處理 不能
適用于前后端數據傳遞 由于不被JSON支持摔蓝,所以不適合 適合

Map無所謂優(yōu)劣方面

Map Object
直接量寫法 構造函數傳入二維數組 直接寫鍵值對

總結

  1. 當需要使用除 String 和 Symbol 以外的鍵名時,那么Map是最佳解決方案愉耙。

  2. 如果需要按插入順序遍歷鍵值對贮尉,用Map。

  3. 頻繁增刪改查朴沿,用Map猜谚。

  4. 想用更方便的原生方法操作,用Map赌渣。

  5. 用于設計模式魏铅。我們經常遇到N個if...else...,這時候就需要考慮設計模式坚芜,由于正則表達式可以作為Map的key览芳,所以可以準備一堆鍵值對,來判斷一個字符串是否符合正則表達式鸿竖,通常用于表單驗證沧竟,可以寫起來更優(yōu)雅。

關于Map用于前后端數據交互

Map由于不被JSON支持缚忧,所以不適合前后端數據交互悟泵,即便是前端加工后端數據,也不值得專門把對象轉為Map闪水,畢竟數據都非常簡單魁袜,只有在特定業(yè)務需要的前提下,才會有對象轉Map的必要敦第,因此峰弹,應當把Map用在前后端數據交互以外的其他某些場合。

Map的原生屬性

  1. size芜果,獲取長度

Map的操作方法

  1. .set(key, value):返回整個Map結構鞠呈。如果key已經有值,則鍵值會被更新右钾,否則就新生成該鍵蚁吝。由于返回整個Map,所以可以鏈式操作舀射。

  2. .get(key):獲取不到則返回undefined窘茁。

  3. .has(key):鍵是否在Map中,返回布爾值脆烟。

  4. .delete(key):刪除成功返回true山林,失敗返回false。

  5. .clear():Map會成為空Map邢羔,方法執(zhí)行返回undefined驼抹。

Map的遍歷方法

  1. .keys():返回鍵名的遍歷器(即MapIterator)。不支持.forEach拜鹤,支持...框冀。

  2. .values():返回鍵值的遍歷器(即MapIterator)。不支持.forEach敏簿,支持...明也。

  3. .entries():返回所有成員的遍歷器(即MapIterator)。通常沒用惯裕,遍歷Map本身可以使用.forEach温数,遍歷它的遍歷器反而不能用.forEach,也就是說這個遍歷器更弱轻猖。

  4. .forEach():遍歷 Map 的所有成員帆吻。跟數組完全一致的用法。

Map如何使用數組的原生方法咙边?

基本原則就是先利用解構得到二維數組猜煮。

Map、對象败许、數組最優(yōu)雅互轉

  1. Map轉對象

沒什么優(yōu)雅的方法王带,只能是遍歷Map,然后依次給對象附加屬性市殷。

const map = new Map();
map.set(1,"foo").set(2,"bar").set(3,"baz");
const mapToObj = (map) => {
     let obj = {};
     for(let [k,v] of map) {
         obj[k] = v;
     }
     return obj;
}
console.log(mapToObj(map));
  1. Map轉數組

最優(yōu)雅辦法是解構愕撰,這種方法會得到二維數組,每個元素格式類似[1, 'foo']。如果只想得到鍵或者值組成的數組搞挣,需要改成...map.map(v=>v[0])或者...map.map(v=>v[1])带迟。

const map = new Map();
map.set(1,"foo").set(2,"bar").set(3,"baz");
const arr = [...map];
console.log(arr);
  1. 對象轉Map

優(yōu)雅辦法是使用Object.entries()將對象解構,得到的結果也是二維數組囱桨,跟...將可遍歷對象解構的結果是一樣的仓犬。恰好new Map()接受二維數組轉換為Map。

let obj = {"a":1, "b":2};
let map = new Map(Object.entries(obj));
  1. 數組轉Map

上面已經說過舍肠,符合格式的二維數組可以直接轉換為Map搀继,如果是一維數組轉Map呢?首先這不一定有必要翠语,因為可能一維數組轉Set更好一些叽躯,如果一定要轉Map,可以這樣:

const arr = ["foo","bar","baz"];
const arrToMap = (arr) => new Map(arr.map( (value,key) => [key,value]));
console.log(arrToMap(arr));
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末肌括,一起剝皮案震驚了整個濱河市点骑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌们童,老刑警劉巖畔况,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異慧库,居然都是意外死亡跷跪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門齐板,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虱而,“玉大人霞势,你說我怎么就攤上這事痹扇』颊” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵济舆,是天一觀的道長卿泽。 經常有香客問我,道長滋觉,這世上最難降的妖魔是什么签夭? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮椎侠,結果婚禮上第租,老公的妹妹穿的比我還像新娘。我一直安慰自己我纪,他們只是感情好慎宾,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布丐吓。 她就那樣靜靜地躺著,像睡著了一般趟据。 火紅的嫁衣襯著肌膚如雪券犁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天之宿,我揣著相機與錄音族操,去河邊找鬼。 笑死比被,一個胖子當著我的面吹牛,可吹牛的內容都是我干的泼舱。 我是一名探鬼主播等缀,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娇昙!你這毒婦竟也來了尺迂?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤冒掌,失蹤者是張志新(化名)和其女友劉穎噪裕,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體股毫,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡膳音,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铃诬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祭陷。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖趣席,靈堂內的尸體忽然破棺而出兵志,到底是詐尸還是另有隱情,我是刑警寧澤宣肚,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布想罕,位于F島的核電站,受9級特大地震影響霉涨,放射性物質發(fā)生泄漏按价。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一嵌纲、第九天 我趴在偏房一處隱蔽的房頂上張望俘枫。 院中可真熱鬧,春花似錦逮走、人聲如沸鸠蚪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茅信。三九已至盾舌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蘸鲸,已是汗流浹背妖谴。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酌摇,地道東北人膝舅。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像窑多,于是被迫代替她去往敵國和親仍稀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345