」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > JavaScript 中的 SET(初學者教程)

JavaScript 中的 SET(初學者教程)

發佈於2024-11-04
瀏覽:726

SET in JavaScript (Tutorial for Beginners)

你好呀,

您是否正在尋找一種儲存唯一值、允許插入值、查找值總數和刪除值的資料結構?套裝是最佳選擇。許多程式語言都包含內建的 Set 資料結構,JavaScript 也不例外。讓我們更深入地了解集合的工作原理。

Set是什麼?
Set 是一種資料結構,可讓您儲存任何類型的唯一值,無論是原始值還是物件參考。此集合允許執行 O(1) 時間複雜度的插入、刪除、更新和大小操作。這使得設定更快、更有效率。

集合旨在提供快速存取時間。它們的實作方式通常使查找項目比簡單地逐項檢查更快。典型的實作可以是哈希表(O(1) 查找)或搜尋樹(O(log(N)) 查找)。

要點

  • 快速存取:集合提供對元素的快速存取。
  • 實作:通常使用哈希表或搜尋樹實作。
  • 找出時間:平均查找時間優於 O(N),通常 O(1) 或 O(log(N)).

基本方法

  1. add :它將添加要設定的元素。如果該元素存在於集合中,它將不執行任何操作。
  2. has :如果元素存在於集合中,則傳回 true,否則傳回 false。
  3. size :它將傳回集合的大小。
  4. delete :將從集合中刪除元素。
  5. keys :JavaScript Set 中的 .keys() 方法傳回一個新的迭代器對象,其中包含按插入順序排列的 Set 值。

範例

// 1. Create a new Set and use the .add() method to add elements
const mySet = new Set();
mySet.add(10);
mySet.add(20);
mySet.add(30);

console.log(mySet); // Output: Set { 10, 20, 30 }

// 2. Check if the Set has a specific element using .has() method
console.log(mySet.has(20)); // Output: true
console.log(mySet.has(40)); // Output: false

// 3. Delete an element from the Set using .delete() method
mySet.delete(20);
console.log(mySet); // Output: Set { 10, 30 }

// 4. Iterate over the Set using .keys() method
// In Sets, .keys() and .values() do the same thing
for (const key of mySet.keys()) {
  console.log(key);
}
// Output:
// 10
// 30

// 5. Get the size of the Set using .size property
console.log(mySet.size); // Output: 2


leetcode問題設定範例:

3.沒有重複字元的最長子字串

給定一個字串s,求最長不包含重複字元的子字串的長度。

解決方案

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let set = new Set();
    let ans = 0;
    let s_index = 0;
    for (let i = 0; i 



解釋:
函數 lengthOfLongestSubstring 使用滑動視窗技術和 Set 來尋找不重複字元的最長子字串:

  • 擴充視窗:如果角色尚不存在,則將其新增至集合。
  • 縮小視窗:當發現重複項時,從視窗開頭刪除字符,調整視窗大小。
  • 更新長度:追蹤具有唯一字元的子字串的最大長度。
  • 此方法透過處理最多每個字元兩次來確保高效的 O(N) 時間複雜度。

就是這樣,如果您有任何疑問或任何建議或任何事情,請隨時添加評論。

來源:
MDN(集)

版本聲明 本文轉載於:https://dev.to/yashrajxdev/set-data-structure-in-javascript-2e4i?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何檢查 Chrome 和 Firefox 中的元素?
    如何檢查 Chrome 和 Firefox 中的元素?
    您有没有想过一个制作精美的网站背后有哪些元素?了解如何检查 Chrome 和 Firefox 中的元素。  每个视觉上令人惊叹的网页都有复杂的 HTML、CSS 和 JavaScript 代码在后端运行。使用名为 Inspect Element 的便捷开发工具,您可以在流行的网络浏览器上检查 HTM...
    程式設計 發佈於2024-11-09
  • 為什麼在 C++ 中設定靜態欄位時出現「無法解析的外部符號」錯誤?
    為什麼在 C++ 中設定靜態欄位時出現「無法解析的外部符號」錯誤?
    靜態物件欄位的無法解析的外部符號本文調查了嘗試設定時遇到的錯誤訊息「error LNK2001:無法解析的外部符號”主方法中的類別中的靜態字段。 在提供的程式碼片段中,類別中靜態欄位「a」的宣告「B」出現在類別定義本身內。但是,根據 C 標準,此類聲明不被視為定義。對於靜態資料成員,正確的定義必須出...
    程式設計 發佈於2024-11-09
  • 如何在 PHP 中高效去除小數中的尾隨零​​?
    如何在 PHP 中高效去除小數中的尾隨零​​?
    在 PHP 中刪除小數中的尾隨零​​在 PHP 中,從小數中刪除尾隨零是一項常見任務。考慮以下場景:您有一組數字,例如 125.00、966.70 和 844.011,您希望顯示這些數字,但不包含不必要的零數字。 快速且優化的解決方案為了有效地完成此任務,您可以採用簡單而有效的解決方案,將數字添加到...
    程式設計 發佈於2024-11-09
  • 如何在 Internet Explorer 8 中使用 nth-child() 在表中實作斑馬條紋?
    如何在 Internet Explorer 8 中使用 nth-child() 在表中實作斑馬條紋?
    Internet Explorer 8 中對nth-child() 的CSS 支援在現代瀏覽器中,CSS nth-child() 元素通常是用於在表格中實現斑馬條紋效果。然而,Internet Explorer 8 中明顯缺少此功能。以下是解決此限制的方法:Polyfill 方法:Selectivi...
    程式設計 發佈於2024-11-09
  • 在 JavaScript 中使用「setTimeout」時如何使用「this」保留上下文?
    在 JavaScript 中使用「setTimeout」時如何使用「this」保留上下文?
    在JavaScript 中使用setTimeout 並透過this 保存上下文在JavaScript 中使用setTimeout 函數時,必須了解它如何處理這的背景。當在超時回調中呼叫不同上下文中定義的方法時,這一點變得特別重要。 在提供的程式碼片段中,方法函數呼叫 method2,該方法根據傳遞的...
    程式設計 發佈於2024-11-09
  • 如何在 C++ 中安全地啟動執行檔:為什麼 CreateProcess() 是您的最佳選擇?
    如何在 C++ 中安全地啟動執行檔:為什麼 CreateProcess() 是您的最佳選擇?
    利用CreateProcess() 啟動可執行檔在本指南中,我們將探討如何從另一個C 執行檔中開啟執行檔(.exe )。 使用 system() 的陷阱在深入研究解決方案之前,強調使用 system() 函數的危險至關重要。 System() 有幾個缺點:它很糟糕,可能會減慢程式速度。 它會破壞安全...
    程式設計 發佈於2024-11-09
  • 使用這些運算符增強您的打字稿遊戲
    使用這些運算符增強您的打字稿遊戲
    空值合併運算子 (??) ?? 運算子用於在處理 null 或未定義時提供預設值。它檢查左側是否為 null 或未定義,如果是,則傳回右側值。 let value = null; let defaultValue = "DefaultValue"; let result = value ?? d...
    程式設計 發佈於2024-11-09
  • 最佳 jsGames 遊戲投票開始了!
    最佳 jsGames 遊戲投票開始了!
    今年的 js13kGames 競賽帶來了 189 款新的小型受限遊戲 - 恭喜每一位成功提交參賽作品的人!現在是時候投票並選出第13屆週年紀念版的獲勝者。 線上投票從9月15日到10月4日進行,獲獎者名單於10月5日公佈。如果您參與並提交了參賽作品,現在您可以評判其他人的遊戲並為他們提供投票。這意...
    程式設計 發佈於2024-11-09
  • 如何在 PHP 中按日期對物件數組進行排序?
    如何在 PHP 中按日期對物件數組進行排序?
    按日期對物件陣列進行排序在PHP 中,我們經常遇到需要按特定屬性對物件陣列進行排序的情況,例如日期欄位。這使我們能夠按時間順序顯示或操作資料。 按日期重新排列物件考慮以下物件數組,其中每個物件代表一條帶有日期屬性:$array = [ 495 => (object)['date' =&...
    程式設計 發佈於2024-11-09
  • 如何使用 document.querySelectorAll 正確循環選定的元素?
    如何使用 document.querySelectorAll 正確循環選定的元素?
    使用 document.querySelectorAll 循環選定的元素在 Web 開發中,循環選定的元素通常是必要的。 document.querySelectorAll 提供了一個表示所選元素的類似陣列的物件。但是,如果直接在 NodeList 上執行迭代,可能會出現問題,導致輸出中出現其他項目...
    程式設計 發佈於2024-11-09
  • 如何使用 jQuery 偵測鍵盤 Enter 按下:綜合指南
    如何使用 jQuery 偵測鍵盤 Enter 按下:綜合指南
    使用 jQuery 檢測鍵盤 Enter 按下:綜合指南檢測使用者輸入對於建立互動式 Web 應用程式至關重要。一項常見任務是捕捉 Enter 按鍵。本文探討如何使用 jQuery 無縫地實現這一點,並解決了瀏覽器相容性的問題。 jQuery 解決方案jQuery 提供了一個名為 keypress(...
    程式設計 發佈於2024-11-09
  • 提高 Spring Boot 應用程式的效能 - 第二部分
    提高 Spring Boot 應用程式的效能 - 第二部分
    在本文的第一部分中,我们学习了如何提高应用程序的性能,将 Tomcat 替换为 Undertow,即高性能 Web 服务器,除了启用和配置数据压缩之外,还可以减少通过网络传输的 HTTP 响应的大小。 现在,我们将讨论如何在持久化部分提高Spring Boot应用程序的性能,但首先我们需要了解什么是...
    程式設計 發佈於2024-11-09
  • 如何在 Golang 中實現真正的並行:Goroutines、死鎖和通道?
    如何在 Golang 中實現真正的並行:Goroutines、死鎖和通道?
    Golang 中的平行處理:利用並發來提高效能考慮提供的程式碼,其中展示了 Goroutines 的並行處理。然而,它提出了關於並發執行的潛力以及實現並行性的最佳方法的問題。 dowork的同時執行dowork並行執行的前提是不保證。雖然 goroutine 提供了輕量級的並發機制,但作業系統排程器...
    程式設計 發佈於2024-11-09
  • 在建構函式中分配原型方法是一個好主意嗎?
    在建構函式中分配原型方法是一個好主意嗎?
    在建構函數中分配原型方法:潛在的缺點和範圍問題序言本文深入研究了建構原型方法時的風格偏好困境JavaScript 物件。首選方法是直接在建構函數函數體內分配方法,這與在構造函數外部定義方法的傳統方法形成鮮明對比。雖然首選方法可能看起來美觀,但問題出現了:這種技術是否存在任何固有的缺點或潛在的範圍問題...
    程式設計 發佈於2024-11-09
  • 為什麼 useState 在嚴格模式下渲染元件兩次?
    為什麼 useState 在嚴格模式下渲染元件兩次?
    理解useState中的雙重渲染在React中,useState鉤子通常用於管理元件狀態。但是,在某些條件下,您可能會注意到使用 useState 呈現的元件對於每次狀態更新都會呈現兩次。這種行為讓許多未啟用嚴格模式的開發人員感到困惑。為什麼會出現這種情況? 嚴格模式的作用與未啟用嚴格模式的假設相反...
    程式設計 發佈於2024-11-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3