JavaScript數組去重性能優化:Set與Object哈希表為何效率最高

文章目錄

  • 數組去重性能優化:為什么Set和Object哈希表的效率最高
    • 引言
    • 一、數組去重的常見方法
      • 1.1 雙重循環法
      • 1.2 indexOf/includes方法
      • 1.3 排序后相鄰比較法
      • 1.4 filter + indexOf方法
      • 1.5 使用Set數據結構
      • 1.6 使用Object哈希表
    • 二、性能對比分析
      • 2.1 時間復雜度對比
      • 2.2 實際性能測試
    • 三、為什么Set和Object哈希表效率最高
      • 3.1 哈希表的基本原理
      • 3.2 JavaScript引擎的優化
      • 3.3 具體實現分析
        • 3.3.1 Set的實現
        • 3.3.2 Object的實現
      • 3.4 內存訪問模式
    • 四、特殊情況處理
      • 4.1 對象去重
      • 4.2 NaN處理
      • 4.3 混合類型
    • 五、性能優化實踐
      • 5.1 大數據量處理
      • 5.2 內存優化
      • 5.3 選擇合適的方法
    • 六、結論

數組去重性能優化:為什么Set和Object哈希表的效率最高

在這里插入圖片描述

?? 我的個人網站:樂樂主題創作室

引言

數組去重是JavaScript開發中最常見的操作之一,也是面試中經常被問到的題目。在實際項目中,我們經常需要處理來自API、用戶輸入或數據庫的大量數據,去除其中的重復項。本文將深入探討各種數組去重方法的性能差異,重點分析為什么Set和Object哈希表在性能上具有顯著優勢。

一、數組去重的常見方法

1.1 雙重循環法

這是最直觀的去重方法,通過雙重循環比較每個元素:

function unique(arr) {const result = [];for (let i = 0; i < arr.length; i++) {let isDuplicate = false;for (let j = 0; j < result.length; j++) {if (arr[i] === result[j]) {isDuplicate = true;break;}}if (!isDuplicate) {result.push(arr[i]);}}return result;
}

時間復雜度:O(n2)
空間復雜度:O(n)

1.2 indexOf/includes方法

利用數組的indexOf或includes方法簡化內層循環:

function unique(arr) {const result = [];for (let i = 0; i < arr.length; i++) {if (result.indexOf(arr[i]) === -1) {result.push(arr[i]);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91118.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91118.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在VS Code中克隆項目失敗

前提條件&#xff1a;電腦中已經安裝好了Git一、錯誤原因&#xff1a;1、打開命令面板 快捷鍵 CtrlShiftP&#xff0c;輸入Git: Clone 并回車&#xff1b;2、輸入倉庫URL回車后就發現報錯了可以看到最后一行的報錯內容&#xff1a;Git 無法找到或讀取 SSL 證書文件&…

ASP.NET Core MVC中taghelper的ModelExpression詳解

Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression 是 ASP.NET Core MVC 框架中的一個核心類型&#xff0c;用于表示對模型屬性的強類型引用。它在 Razor 視圖、表單綁定和自定義 Tag Helper 中扮演關鍵角色&#xff0c;下面從技術細節、應用場景和最佳實踐三個方面詳細解…

樓宇 3D 建模:驅動建筑領域革新的數字力量

在科技飛速發展的當下&#xff0c;數字化技術正深刻改變著各個行業&#xff0c;建筑領域也不例外。樓宇 3D 建模作為關鍵的數字化技術&#xff0c;逐漸成為建筑設計、施工和管理過程中不可或缺的工具。它通過將現實中的樓宇以三維數字模型呈現&#xff0c;為建筑行業帶來前所未…

打通視頻到AI的第一公里:輕量RTSP服務如何重塑邊緣感知入口?

在 AI 系統大規模部署、設備邊緣化、數據實時化趨勢下&#xff0c;視頻能力的部署方式正迎來深刻變革。2025世界人工智能大會&#xff08;WAIC&#xff09;上&#xff0c;視頻感知與智能決策之間的“連接效率”成為關鍵話題。而在這場連接能力的競爭中&#xff0c;輕量級、標準…

旅行短視頻模糊的常見原因及應對方法

在旅行中拍攝短視頻時&#xff0c;你是否經常遇到這樣的問題&#xff1a;明明景色很美&#xff0c;但拍出來的視頻卻模糊不清&#xff0c;色彩暗淡&#xff0c;甚至噪點嚴重&#xff1f;尤其是在弱光環境&#xff08;如夜景、洞穴&#xff09;或快速移動&#xff08;如航拍、運…

【基礎篇四】ASGI:Python異步Web的新標準

目錄 一、ASGI規范深度解析 1.1 ASGI的誕生背景 1.2 ASGI核心概念 1.3 ASGI規范版本演進 二、WSGI vs ASGI&#xff1a;深度對比分析 2.1 架構模式對比 2.2 性能特性對比 2.3 適用場景分析 三、ASGI支持的協議類型 3.1 HTTP協議支持 3.1.1 HTTP處理流程 3.2 HTTP S…

51 單片機單文件多文件結構工程模板的創建教程

本章將詳細介紹KEIL C51軟件的使用方法及51單片機工程的創建流程。通過本章學習&#xff0c;掌握建立51單片機工程模板的技能&#xff0c;為后續51 單片機編程學習奠定基礎。 單文件與多文件結構對比 對比項單文件結構多文件結構項目規模小項目、實驗項目中大型項目、正式開發…

【Git】實用Git操作指南:從入門到高效協作

目錄 1. Git 工作流程圖 2. 基本配置 3. 獲取本地倉庫 4. 基礎操作 5. 分支 6. Git遠程倉庫 6.1 常用的托管服務[遠程倉庫] 6.2 注冊碼云 6.3創建遠程倉庫 6.4 配置SSH公鑰 6.5 操作遠程倉庫 7. 在IDEA中使用Git 附&#xff1a;鐵令 下載地址&#xff1a;Git - Downloads 安裝&…

InstructBLIP:通過指令微調邁向通用視覺-語言模型

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" InstructBLIP&#xff1a;通過指令微調邁向通用視覺-語言模型 摘要 大規模預訓練和指令微調在構建通用語言模型方面取得了顯著成功。然而&#xff0c;構建通用視覺-語言模型仍然面臨挑戰&#xff0c;這主要源于…

[python][flask]flask藍圖使用方法

在 Flask 中&#xff0c;藍圖&#xff08;Blueprint&#xff09;是一種用于組織和管理代碼的機制&#xff0c;可以將應用分解為多個模塊&#xff0c;每個模塊專注于特定的功能。以下是使用藍圖的基本步驟和方法&#xff1a;1. 創建藍圖首先&#xff0c;需要創建一個藍圖對象。藍…

學習dify:一個開源的 LLM 應用開發平臺

Dify 是一個開源的 LLM 應用開發平臺。其直觀的界面結合了 AI 工作流、RAG 管道、Agent、模型管理、可觀測性功能等&#xff0c;讓您可以快速從原型到生產。以下是其核心功能列表&#xff1a; 1. 工作流: 在畫布上構建和測試功能強大的 AI 工作流程&#xff0c;利用以下所有…

VEX實現物體沿線條流動

1. 效果如下&#xff1a;float offset fit01(rand(ptnum654),0.5,1)*Time*chf("speed") rand(ptnum547);int num nprimitives(1); vector pos primuv(1,"P",ptnum%num,offset%1);P pos;2.效果如下&#xff1a; float min detail(1,"min");…

puppeteer 系列模塊的系統性、詳細講解

puppeteer 系列模塊的系統性、詳細講解 &#x1f9e9; 一、核心模塊介紹 1. puppeteer全功能 Puppeteer 包&#xff0c;默認包含 Chromium 瀏覽器npm install puppeteer包含內容&#xff1a;Puppeteer API Chromium 瀏覽器適合場景&#xff1a; 想直接運行&#xff0c;不關心瀏…

golang實現一個規則引擎,功能包括實時增加、修改、刪除規則

以下是一個用 Go 實現的輕量級規則引擎,支持實時增加、修改、刪除規則,并基于表達式評估觸發規則動作: package mainimport ("errors""fmt""sync" )// Rule 定義規則結構體 type Rule struct {ID string // 規則唯一標…

算法訓練營day34 動態規劃② 62.不同路徑、63. 不同路徑 II、343整數拆分、96.不同的二叉搜索樹

動態規劃的第二篇博客&#xff01;進階題目&#xff0c;有一說一&#xff0c;尤其最后一道題&#xff0c;真的難想到這種解法 找規律&#xff01;&#xff01;&#xff01; 62.不同路徑 注意本題是路徑不是路程&#xff01;&#xff01;&#xff01; 動態規劃 確定dp數組&am…

Spring 5 事務詳解

一、核心使用方式聲明式事務&#xff08;推薦&#xff09;通過 Transactional 注解實現&#xff0c;需配合配置啟用&#xff1a;Configuration EnableTransactionManagement public class AppConfig {Beanpublic PlatformTransactionManager txManager(DataSource dataSource) …

[ctfshow web入門]web99 in_array的弱比較漏洞

信息收集 array_push(array, value)&#xff1a;向數組最后的位置插入value in_array(value, array, type)&#xff1a;其中value是要查找的值&#xff0c;array是需要查找的的數組&#xff0c;type是查找的類型&#xff0c;如果沒有指定類型&#xff0c;則以弱比較方式查找 i…

mysql5.6 常用查詢sql

mysql5.6 常用查詢sql 文章目錄 mysql5.6 常用查詢sql 1.查詢版本 2.MySQL 運行狀態(Ping) 3.慢查詢數量 4.連接數 5.最大連接數 6.InnoDB 緩沖池命中率 7.表鎖等待次數 8.二進制日志狀態 9.表空間使用率 10.查詢緩存效率 11.每次自動擴展空間大小 12.導入導出 ? 一、導出(…

【在Unity游戲開發中Dictionary、List介紹】

在Unity游戲開發中&#xff0c;Dictionary和List是最核心的兩種數據結構&#xff0c;它們各自有優勢和應用場景。以下是介紹&#xff1a;&#x1f9e0; 數據結構本質對比特性Dictionary<TKey, TValue>List底層結構哈希表&#xff08;Hash Table&#xff09;動態數組&…