最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數(shù)據(jù)結(jié)構(gòu)Map的使用實(shí)例詳解

 更新時間:2025年08月23日 13:45:24   作者:Hi_MrXiao  
JavaScript中Map是ES6引入的數(shù)據(jù)結(jié)構(gòu),鍵可為任意類型,保留插入順序,支持迭代和size屬性,相比對象更靈活高效,適合復(fù)雜鍵和有序場景,但需注意對象鍵引用比較及NaN的特殊處理,本文給大家介紹JavaScript數(shù)據(jù)結(jié)構(gòu)Map的使用,感興趣的朋友一起看看吧

在 JavaScript 中,Map 是 ES6 引入的一種新的數(shù)據(jù)結(jié)構(gòu),它類似于對象,也是鍵值對的集合,但 Map 的鍵可以是任意類型的值(對象、函數(shù)、基本類型等),而傳統(tǒng)對象的鍵只能是字符串或 Symbol,并且Map保留了插入順序。

一、Map 的特性

  • 鍵值對集合:存儲鍵值對,類似對象
  • 鍵的多樣性‌:鍵可以是任意數(shù)據(jù)類型(對象、函數(shù)、基本類型等),而不僅限于字符串或 Symbol。
  • 保留‌插入順序:遍歷時按插入順序返回鍵值對
  • 直接獲取大小‌:通過 size 屬性快速獲取元素數(shù)量
  • 支持‌迭代:原生支持 for…of、forEach 等遍歷方式
  • 性能優(yōu)化‌:在頻繁增刪鍵值對的場景下性能更優(yōu)

二、創(chuàng)建 Map

1、‌創(chuàng)建一個空 Map

const emptySet = new Map();

2、創(chuàng)建一個帶有初始鍵值對的 Map,通過二維數(shù)組初始化

const map2 = new Map([
  ['name', '張三'],
  ['age', 25],
  [1, '數(shù)字鍵'],
  [{}, '對象鍵']
]);

三、Map 的常用屬性和方法

  • set() 添加元素

    const map = new Map();
    map.set('name', '李四');
    map.set(1, '數(shù)字一');
    map.set({id: 1}, '對象鍵值');
    
  • get() 獲取元素

    console.log(map.get('name')); // 李四
    console.log(map.get(1));      // 數(shù)字一
    
  • has() 檢查鍵是否存在

    console.log(map.has('name')); // true
    console.log(map.has('address')); // false
    
  • delete() 刪除元素

    map.delete('name');
    console.log(map.has('name')); // false
    
  • clear() 清空 Map

    map.clear();
    console.log(map.size); // 0
    
  • size屬性 獲取大小

    console.log(map.size); // 元素數(shù)量
    

四、遍歷 Map

1、 for…of 循環(huán)

const map = new Map([
  ['a', 1],
  ['b', 2],
  ['c', 3]
]);

for (const [key, value] of map) {
  console.log(key, value);
}

2、forEach 方法

map.forEach((value, key) => {
  console.log(key, value);
});

3、獲取迭代器

  • 獲取鍵的迭代器 keys()

    for (const key of map.keys()) {
      console.log(key);
    }
    
  • 獲取值的迭代器 values()

    for (const value of map.values()) {
      console.log(value);
    }
    
  • 獲取鍵值對的迭代器 entries()
    返回一個包含 [key, value] 對的迭代器

    for (const [key, value] of map.entries()) {
      console.log(key, value);
    }
    

五、Map 與 Object 的比較

特性MapObject
鍵的類型任意值String 或 Symbol
鍵的順序插入順序不一定
大小size屬性手動計算
性能(頻繁增刪)更優(yōu)一般
序列化不能直接JSON序列化可以直接序列化
默認(rèn)鍵有原型鏈上的鍵

六、與對象/數(shù)組的轉(zhuǎn)換‌

1、對象轉(zhuǎn)為Map‌

const obj = { a: 1, b: 2 };
const map = new Map(Object.entries(obj));

2、Map轉(zhuǎn)為對象‌

const map = new Map([["a", 1], ["b", 2]]);
const obj = Object.fromEntries(map);

3、Map轉(zhuǎn)為數(shù)組‌

console.log([...map]); // 轉(zhuǎn)二維數(shù)組
console.log([...map.keys()]); // 所有鍵的數(shù)組

七、使用場景

  • 需要鍵不是字符串/符號時:比如要用對象作為鍵

  • 需要保持插入順序時:Map 會記住鍵的原始插入順序

  • 頻繁增刪鍵值對時:Map 性能更好

  • 需要知道數(shù)據(jù)大小時:Map 有 size 屬性

八、使用示例

1、統(tǒng)計字符出現(xiàn)次數(shù)

function countChars(str) {
  const result = new Map();
  for (const char of str) {
    result.set(char, (result.get(char) || 0) + 1);
  }
  return result;
}

const charCount = countChars('hello world');
console.log(charCount.get('o')); // 2

2、使用復(fù)雜對象作為鍵

const user1 = {id: 1, name: 'admin'};
const user2 = {id: 2, name: 'test'};

const userMapData = new Map();
userMapData.set(user1, {roleCode: 'admin', createTime: '2025-04-09'});
userMapData.set(user2, {roleCode: 'user', createTime: '2025-04-09'});

console.log(userMapData.get(user1).roleCode); // 'admin'

3、對象關(guān)聯(lián)元數(shù)據(jù)
dom對象本身作為鍵存儲額外數(shù)據(jù),避免污染對象屬性

const domMetadata = new Map();
const button = document.querySelector("#myButton");

// 綁定點(diǎn)擊次數(shù)元數(shù)據(jù)
domMetadata.set(button, { clickCount: 0 });

button.addEventListener("click", () => {
  const metadata = domMetadata.get(button);
  metadata.clickCount++;
  console.log(`點(diǎn)擊次數(shù):${metadata.clickCount}`);
});

九、注意事項(xiàng)

1、對象作為鍵時: Map 的鍵是基于引用比較的,兩個看起來相同的對象作為鍵是不同的

const map = new Map();
map.set({}, 'value1');
map.set({}, 'value2');
console.log(map.size, map.get({}));  // 2 undefined(不同引用)

let obj = {};
map.set(obj, 'value3');
console.log(map.obj); // value3

2、 NaN 作為鍵時: 雖然 NaN !== NaN,但在 Map 中被視作同一鍵

map.set(NaN, 'not a number');
console.log(map.get(NaN)); // 'not a number'

Map 是一種強(qiáng)大且靈活的數(shù)據(jù)結(jié)構(gòu),通過靈活使用 Map,可以更高效地處理復(fù)雜鍵類型和有序鍵值對的場景,提升代碼可讀性和性能。

到此這篇關(guān)于JavaScript數(shù)據(jù)結(jié)構(gòu)Map的使用實(shí)例詳解的文章就介紹到這了,更多相關(guān)js map使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 原生js實(shí)現(xiàn)對Ajax的封裝(仿jquery)

    原生js實(shí)現(xiàn)對Ajax的封裝(仿jquery)

    這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)對Ajax的封裝,模仿jquery,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • js腳本編寫簡單刷票投票系統(tǒng)

    js腳本編寫簡單刷票投票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了js腳本編寫簡單刷票投票系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 一個簡單的js樹形菜單

    一個簡單的js樹形菜單

    說到樹形菜單,貌似一般是用在一些管理系統(tǒng)里面的,我是還沒有用到過,有些zTree之類的插件已經(jīng)做得比較好了
    2011-12-12
  • JavaScript中常用的簡潔高級技巧總結(jié)

    JavaScript中常用的簡潔高級技巧總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于JavaScript中常用的簡潔高級技巧,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Javascript具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JavaScript實(shí)現(xiàn)tab欄切換的幾種常用方法

    JavaScript實(shí)現(xiàn)tab欄切換的幾種常用方法

    這篇文章主要給大家介紹了關(guān)于JavaScript實(shí)現(xiàn)tab欄切換的幾種常用方法,在Web開發(fā)中Tab切換是一個常見的功能,它允許用戶在不同的頁面部分之間進(jìn)行切換,需要的朋友可以參考下
    2023-12-12
  • 學(xué)習(xí)RxJS之JavaScript框架Cycle.js

    學(xué)習(xí)RxJS之JavaScript框架Cycle.js

    這篇文章主要介紹了學(xué)習(xí)RxJS之JavaScript框架Cycle.js ,它是一個極簡的JavaScript框架(核心部分加上注釋125行),提供了一種函數(shù)式,響應(yīng)式的人機(jī)交互接口,需要的朋友可以參考下
    2019-06-06
  • 微信小程序畫布顯示圖片繪制矩形選區(qū)效果

    微信小程序畫布顯示圖片繪制矩形選區(qū)效果

    這篇文章主要介紹了微信小程序畫布顯示圖片繪制矩形選區(qū)效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-05-05
  • js獲取或設(shè)置當(dāng)前窗口url參數(shù)的小例子

    js獲取或設(shè)置當(dāng)前窗口url參數(shù)的小例子

    這篇文章介紹了js獲取或設(shè)置當(dāng)前窗口url參數(shù)的小例子,有需要的朋友可以參考一下
    2013-10-10
  • uni-app使用uniCloud實(shí)現(xiàn)圖形驗(yàn)證碼(uni-captcha)詳細(xì)過程

    uni-app使用uniCloud實(shí)現(xiàn)圖形驗(yàn)證碼(uni-captcha)詳細(xì)過程

    這篇文章主要給大家介紹了關(guān)于uni-app使用uniCloud實(shí)現(xiàn)圖形驗(yàn)證碼(uni-captcha)的相關(guān)資料,實(shí)際開發(fā)工作中在登陸的時候經(jīng)常需要圖形驗(yàn)證碼,需要的朋友可以參考下
    2023-07-07
  • Openlayers測量距離與面積的實(shí)現(xiàn)方法

    Openlayers測量距離與面積的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Openlayers測量距離與面積的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09

最新評論

阿坝| 石林| 应用必备| 江山市| 漠河县| 合山市| 江门市| 青龙| 正阳县| 绿春县| 大洼县| 云龙县| 望城县| 乐至县| 麦盖提县| 新建县| 神农架林区| 上杭县| 合江县| 大荔县| 正宁县| 东至县| 平湖市| 清流县| 内江市| 陆丰市| 华坪县| 工布江达县| 大方县| 永宁县| 共和县| 日喀则市| 凤翔县| 麻城市| 昌乐县| 乐山市| 恩平市| 武汉市| 洮南市| 靖州| 玛曲县|