Map對象

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
————————————————
1.Map對象在遍歷時的順序是確定的,由插入順序決定。用 for ... of 遍歷,不能通過 for in 遍歷。
2.可以通過size屬性,獲取鍵值對的個數(shù),而不是length。
3.Map的基礎(chǔ)用法

let myMap = new Map();
myMap.set('a',1)
myMap.set('b',2)
myMap.get('a')
for (let [key, value] of myMap) {
  console.log(key + " = " + value);
}
for (let key of myMap.keys()) {
  console.log(key);
}
for (let value of myMap.values()) {
  console.log(value);
}
for (let [key, value] of myMap.entries()) { // 只能通過數(shù)組來解構(gòu)
  console.log(key + " = " + value);
}
myMap.forEach(function(value, key) { // value 在前,key 在后
  console.log(key + " = " + value);
})
myMap.delete('a')

4.Map與數(shù)組
(1)直接用二維數(shù)組生成Map對象
內(nèi)部數(shù)組里只取前兩個值,多的直接丟棄,一個值時value值為undefined,空數(shù)組 key\value 均為undefined

(2)可以用Array.from 將Map對象轉(zhuǎn)成二維數(shù)組,或者直接用展開運算符 ... 。
(3)Map 的復(fù)制和合并

let first = new Map([
  [1, 'one'],
  [2, 'two'],
  [3, 'three'],
]);
let second = new Map([
  [1, 'uno'],
  [2, 'dos']
]);
let merged = new Map([...first, ...second]); //如果有重復(fù)的鍵值,則后面的會覆蓋前面的

let original = new Map([
  [1, 'one']
]);
let clone = new Map(original); //直接用Map對象做參數(shù)

5.可以在Map上設(shè)置對象的屬性,但是有些操作會引起混亂,最好別混用

let wrongMap = new Map()
wrongMap['bla'] = 'blaa'
wrongMap['bla2'] = 'blaaa2'
console.log(wrongMap)  // Map { bla: 'blaa', bla2: 'blaaa2' }

wrongMap.has('bla')    // false
wrongMap.delete('bla') // false
console.log(wrongMap)  // Map { bla: 'blaa', bla2: 'blaaa2' }

6.Map 和Object的比較

Map Object
意外的鍵 只有顯式插入的鍵 有原型,原型上可能有沖突的
鍵的類型 任意值,函數(shù)、對象、數(shù)字等等 只能是String和Symbol
鍵的順序 有序,以插入順序為準(zhǔn) 無序,每次遍歷順序可能都不同
size size屬性 只能手動計算鍵值對個數(shù)
迭代 是iterable的,可直接迭代 以某種方式獲取鍵后才能迭代??
性能 在頻繁增刪鍵值對的場景下表現(xiàn)更好。 在頻繁添加和刪除鍵值對的場景下未作出優(yōu)化。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容