Map

来源:https://www.cnblogs.com/Liu-h/archive/2023/06/09/17468137.html
-Advertisement-
Play Games

基於electron25+vite4+vue3仿製chatgpt客戶端聊天模板ElectronChatGPT。 electron-chatgpt 使用最新桌面端技術Electron25.x結合Vite4.x全家桶技術開發跨端模仿ChatGPT智能聊天程式模板。支持經典+分欄兩種佈局、暗黑+明亮主題模 ...


簡介

Map -- JS內置對象

Map對象保存鍵值對 -- 能夠記住鍵的原始插入順序 -- 任何值(數據類型包括對象)都可以作為一個鍵或一個值

Map對象是鍵值對的集合 -- Map中的一個鍵只能出現一次

Map對象按鍵值對迭代 -- for...of迴圈在每次迭代後會返回一個形式為[key,value]的數組

let map = new Map([
    [1, 'liu'],
    [2, 'hei'],
    [3, 'may']
]);
for (const item of map) {
    console.log(item);  // [1,'liu'] [2,'hei'] [3,'may']
}

Map可以在內部表示為複雜度小於O(N)的任何數據結構 -- 包括哈希表(O(1)查找)、搜索樹(O(log(N))查找)

創建Map對象

語法

iterable -- Map對象的一個元素 -- 是鍵值對的數組或是其他可迭代對象

new Map() 	//	創建空對象
new Map(iterable) //創建帶有元素的對象

創建新Map

const map = new Map([
[1,'one'],
[2,'two'],
[3,'three'],
]);
console.log(map);

實例屬性

Map.prototype.size

size -- 只讀屬性 -- 不能修改 -- 值是一個整數 -- 表示Map對象有多少個鍵值對

const map = new Map([
[1,'one'],
[2,'two'],
[3,'three'],
]);
console.log(map.size);	//3

實例方法

Map.prototype.clear()

clear() -- 移除Map對象中的所有元素

const map = new Map([
    [1, 'one'],
    [2, 'two'],
    [3, 'three'],
])
console.log(map.size);  //3
map.clear();
console.log(map.size);  //0

Map.prototype.delete()

delete() -- 移除Map對象中指定的元素

語法--delete(key)

key -- 要從Map中刪除的元素的鍵

返回值 -- Map對象中的元素存在且已被移除 - 返回true;若元素不存在 - 返回false

const map = new Map([
    [1, 'one'],
    [2, 'two'],
    [3, 'three'],
])
console.log(map.delete(1)); //true
console.log(map.delete(5)); //false
console.log(map);   //Map(2) {2 => 'two', 3 => 'three'}

Map.prototype.get()

get() -- 從Map對象中返回指定的元素

若與該鍵相匹配的值是一個對象 -- 會獲得對該對象的引用 -- 可用在Map對象中修改它

語法 -- get(key)

key -- Map對象返回的元素的鍵

返回值 -- 與該鍵相匹配的值 -- 若該鍵在Map對象中不存在 -- 返回undefined

const map = new Map([
    [1, 'one'],
    [2, 'two'],
    [3, 'three'],
    [4, []]
])
console.log(map.get(1));    //one
console.log(map.get(10));   //undefined
map.get(4).push('four')
console.log(map.get(4));       //['four']

Map.prototype.has()

has() -- 返回一個布爾值 -- 判斷具有指定鍵的元素是否存在

語法 -- has(key)

返回值 -- 若Map對象中存在具有指定鍵的元素 -- 返回true ;否則返回false

const map = new Map([
    [1, 'one'],
    [2, 'two'],
    [3, 'three'],
    [4, []]
])
console.log(map.has(1));    //true
console.log(map.has(6));    //false

Map.prototype.set()

set() -- 為Map對象添加或更新一個指定鍵和值的新鍵值對

語法 -- set(key,value)

返回值Map對象

const map = new Map([
    [1, 'one'],
    [2, 'two'],
    [3, 'three'],
    [4, []]
])
map.set('a', 'A');
map.set(4, 'four')
console.log(map.set('b', 'B'));

鏈式使用set

map.set('c', 'C')
    .set('d', 'D')
    .set('e', 'E')
console.log(map);

Map.prototype.entries()

entries() -- 返回一個新的迭代器對象 -- 包含Map對象中按插入順序排序的每個元素的鍵值對

迭代器對象也是一個可迭代對象 -- 可使用for-of迴圈

語法 -- entries

返回值 -- 一個新的Map迭代器對象

const map = new Map([
    [1, 'one'],
    [2, 'two'],
    [3, 'three'],
    [4, []]
])
let iter = map.entries();
console.log(iter.next().value);
console.log(iter.next().value);
console.log(iter.next());

Map.prototype@@iterator

@@iterator -- 初始值與entries屬性的初始值是同一個函數對象

語法 -- map[Symbol.iterator]

返回值 -- Map的iterator函數預設是entries()函數

let iter = map[Symbol.iterator]();
console.log(iter.next().value); //[1, 'one']
console.log(iter.next().value); //[2, 'two']
console.log(iter.next().value); //[3,'three']

在for...of中使用

for (const entry of map) {
    console.log(entry);
}

Map.prototype.keys()

keys() -- 返回一個引用的迭代器對象 -- 包括按順序插入Map對象中每個元素的key值

語法 -- keys()

返回值 -- 一個新的迭代器對象

let iter = map.keys()
console.log(iter.next().value); //1
console.log(iter.next().value); //2
console.log(iter.next().value); //3

Map.prototype.values()

values() -- 返回一個新的的迭代器對象 -- 包括按順序插入Map對象中每個元素的value值

語法 -- values()

返回值 -- 一個新的迭代器對象

let iter = map.values()
console.log(iter.next().value); //one
console.log(iter.next().value); //two
console.log(iter.next().value); //three

Map.prototype.forEach()

forEach() -- 安裝插入順序依次對Map中每個鍵值對執行一次給定的函數

語法

forEach(callbackFn)
forEach(callbackFn,thisArg)
  • callbackFn --Map中每個元素要執行的函數 -- 有如下參數 -- 都是可選
    • value -- 每個迭代的值
    • key -- 每個迭代的鍵
    • map -- 每個迭代的Map
  • thisArg -- 在callbackFn執行中使用的this的值

返回值undefined

  • 註意
    • forEach方法會對 map 中每個真實存在的鍵執行一次給定的 callbackFn函數。它不會對被刪除的鍵執行函數。然而,它會對每個值為 undefined的鍵執行函數
    • 每個值只被訪問一次,除非它在 forEach結束前被刪除並被重新添加。callbackFn不會對在被訪問前就刪除的元素執行。在 forEach結束前被添加的元素都將會被訪問
function logMapElements(value, key, map) {
    console.log(`map.get('${key}') = ${value}`);
}
new Map([
    ['foo', 3],
    ['bar', {}],
    ['baz', undefined]
]).forEach(logMapElements)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • es操作同一個索引里數據的複製語法 複製數據: POST _reindex { "source": { "index": "source_index" }, "dest": { "index": "destination_index" } } 欄位值修改: POST source_index/_up ...
  • 在Oracle 19c多租戶環境的PDB資料庫下麵創建一個DIRECTORY時,遇到了“ORA-65254: invalid path specified for the directory”,下麵簡單演示一下所遇到的這個案例 SQL> CREATE PLUGGABLE DATABASE PDB6  ...
  • 📝背景 公司高級表單組件ProForm高階組件都建立在jsx的運用配置上,項目在實踐落地過程中積累了豐富的經驗,也充分感受到了jsx語法的靈活便捷和可維護性強大,享受到了用其開發的樂趣,獨樂樂不如眾樂樂,為了幫助大家更好的運用jsx,開發提效,特此總結分享。 💎效果對比 以前 以往我們開發一個列 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 Vue 3 穩定已經有一段時間了。許多代碼庫正在生產中使用它,其他人最終也必須進行遷移。我有機會與它一起工作,並記錄了我的錯誤,這可能是你想避免的。 1.使用響應式助手聲明基本類型 數據聲明曾經很簡單,但現在有多個輔助工具可用。現在的一般 ...
  • # JS語法學習 **Javascript:客戶端的腳本語言** ## **1. JavaScript數據類型** ![](https://img2023.cnblogs.com/blog/3008601/202306/3008601-20230607170622855-1334758269.png ...
  • >我們是[袋鼠雲數棧 UED 團隊](http://ued.dtstack.cn/),致力於打造優秀的一站式數據中台產品。我們始終保持工匠精神,探索前端道路,為社區積累並傳播經驗價值。。 >本文作者:霽明 # 一、背景 ## 1、業務背景 業務中會有一些需要實現拖拽的場景,尤其是偏視覺方向以及移動端 ...
  • 在前端開發中,最常見的字元編碼方案是 UTF-8。UTF-8是一種可變長度的 Unicode 編碼方案,可以表示幾乎所有的字元,並且與 ASCII 相容。由於互聯網的廣泛應用和多語言的支持,UTF-8成為了前端開發中的首選字元編碼方案。 使用UTF-8編碼的好處: 1. 多語言支持 :UTF-8可以 ...
  • 在現有的大環境下,越來越註重用戶體驗,因此對圖片庫的要求也日益攀升。從成本的角度來看,使用 AVIF 格式可以節省大量的網路帶寬和存儲空間,減少網站載入時間,可以改善用戶體驗,進而提高網站的效率和收益,節約大量的費用。 AVIF 的優點在於它可以提供更好的圖像質量和更小的文件大小。與 JPEG 相... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...