數據結構Map

map是ES提供的一種字典數據結構

字典結構——用來存儲不重複key的hash結構。不同於集合(set)的是,字典使用的是鍵值對的形式來存儲數據

JavaScript對象(object:{})只能用字符串來當key,這對使用帶來了不便,爲了解決這個問題,ES6提供了map數據結構。其類似於對象,也是鍵值對的集合,但“key”的範圍不僅限於字符串,而是各種類型的值都可以當做key。也就是說,object提供了“字符串-值”的對應結構,map則提供的是“值-值”的對應。是一種更加完善的hash結構。

 

對象對map結構的支持演示

var data1={a:1},
      data2={b:2},
      obj={};
      //爲obj對象添加屬性(將data1和data2作爲屬性名)
      obj[data1]=1;
      obj[data2]=2;
      console.log(obj);

可以看到結果並非我們需要的

創建一個map

const map=new Map([
     ['a',1],
     ['b',2]
]);
console.log(map);

上面的['a',1]代表,將a作爲key,1作爲value聲明

那麼是否['a',1]中能寫入第三個元素呢?答案是可以的,但是!ES6不會理你

map類的屬性——size        用於獲取map的長度

console.log(map.size);

map類的方法——set   Map.set(key,value)  設置鍵名key對應的鍵值爲value,然後返回整個map結構。如果key已經有值,則鍵值會被更新,否則生成新的鍵

console.log(map.set([1,2,3],'3元素的數組'));
//也可以鏈式添加
map.set('name','張三').set('age',28);
console.log(map);

map類的方法——get  Map.get(key)    讀取key對應的鍵值,如果獲取不到則返回undefined

console.log(map.get('name'));

map類的方法——delete   Map.delete(key)     刪除某個鍵,如果刪除成功返回true,否則返回false

console.log(map.delete('name'));

map類的方法——has      Map.has(key)        判斷某個鍵是否存在於map中,返回布爾值

console.log(map.has('name'));

map類的方法——clear    Map.clear()         清除所有數據,沒有返回值

map.clear()

map類的方法——keys     Map.keys()          返回鍵名的遍歷器

console.log(map.keys());

map類的方法——values   Map.values()        返回鍵值的遍歷器

console.log(map.values());

map類的方法——entries  Map.entries()       返回鍵值對的遍歷器

console.log(map.entries());

map類的方法——forEach  map.forEach(function(){})   使用回調遍歷每一個成員

map.forEach(function (value, key, map) {
      console.log(`這是key:${key},這是value:${value},這是map本身:${map}`);
})

Map在使用過程中需要注意的地方

1.在js中NaN是不等於自身的一種數據類型,但是在map中,多次set以NaN爲key的數據的時候,會產生覆蓋的行爲。說明map會將NaN視爲同一個鍵

map.set(NaN,1).set(NaN,10);
console.log(map);

2.如果map數據中以空對象作爲key({})的話,會發現,出現了兩個key,這是因爲每一個{}都是全新的引用,其不同的是內存地址。而反觀上面的NaN,其地址只有一個,所以纔會出現覆蓋的情況

map.set({},1).set({},2);
console.log(map);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章