在JavaScript中,比較兩個數組是否有相同元素(交集)的常用方法

方法1:使用?some()?+?includes()(適合小數組)

function haveCommonElements(arr1, arr2) {return arr1.some(item => arr2.includes(item));
}// 使用示例
const arrA = [1, 2, 3];
const arrB = [3, 4, 5];
console.log(haveCommonElements(arrA, arrB)); // true

方法2:使用?Set(適合大數組,性能更優)

function haveCommonElements(arr1, arr2) {const set = new Set(arr2);return arr1.some(item => set.has(item));
}// 使用示例
const arrC = ['apple', 'banana'];
const arrD = ['orange', 'banana', 'grape'];
console.log(haveCommonElements(arrC, arrD)); // true

方法3:使用?filter()?+?includes()(直接獲取交集元素)

function getCommonElements(arr1, arr2) {return arr1.filter(item => arr2.includes(item));
}// 檢查是否有交集
const common = getCommonElements([1, 2], [2, 3]);
console.log(common.length > 0); // true

注意事項:

  1. 對象/引用類型:以上方法只適用于基本類型(數字、字符串等)。對象比較的是引用地址:

    const obj1 = { id: 1 };
    const obj2 = { id: 1 };
    const arr1 = [obj1];
    const arr2 = [obj2];// 錯誤:比較的是引用地址而非內容
    console.log(haveCommonElements(arr1, arr2)); // false

    需使用JSON.stringify()或深度比較(如Lodash的_.isEqual())處理對象。

  2. 性能考慮

    • 小數組(<1000元素):includes()?可滿足需求

    • 大數組:使用?SetSet.has()?的時間復雜度為 O(1))

完整解決方案(支持基本類型):

function haveCommonElements(arr1, arr2) {// 使用 Set 優化性能const set = new Set(arr2);return arr1.some(item => set.has(item));
}// 測試用例
console.log(haveCommonElements([1, 2], [3, 4]));     // false
console.log(haveCommonElements(['a', 'b'], ['b']));  // true
console.log(haveCommonElements([], []));             // false

處理對象數組的擴展方案:

// 使用 Lodash 的深比較
import _ from 'lodash';function haveCommonObjects(arr1, arr2) {return arr1.some(item1 => arr2.some(item2 => _.isEqual(item1, item2)));
}// 或使用 JSON.stringify(注意:屬性順序需一致)
function haveCommonObjects(arr1, arr2) {const set = new Set(arr2.map(item => JSON.stringify(item)));return arr1.some(item => set.has(JSON.stringify(item)));
}

根據需求選擇合適的方法:

  • 基本類型:推薦?Set?方案(高效簡潔)

  • 對象類型:使用 Lodash 等庫的深度比較函數

  • 超大型數組:考慮分塊處理或 Web Worker 避免阻塞

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

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

相關文章

心路歷程-Linux的系統破解詳細解說

CentOS7系統密碼破解 密碼破解是分兩種情況的&#xff1b;一種是在系統的界面內&#xff0c;一種就是不在系統的頁面&#xff1b; 今天我們就來聊聊這個系統破解的話題&#xff1b; 1.為什么需要破解密碼&#xff1f;–>那當然是忘記了密碼&#xff1b;需從新設置密碼 2.但是…

IDE和AHCI硬盤模式有什么區別

IDE&#xff08;Integrated Drive Electronics&#xff09;和 AHCI&#xff08;Advanced Host Controller Interface&#xff09;是硬盤控制器的工作模式&#xff0c;主要區別在于性能、功能兼容性以及對現代存儲設備的支持程度。以下是詳細對比和分析&#xff1a;一、本質區別…

【密碼學實戰】密碼實現安全測試基礎篇 . KAT(已知答案測試)技術解析與實踐

KAT 測試技術解析 在密碼算法的安全性驗證體系中&#xff0c;Known Answer Test&#xff08;KAT&#xff0c;已知答案測試&#xff09;是一項基礎且關鍵的技術。它通過 “已知輸入 - 預期輸出” 的確定性驗證邏輯&#xff0c;為密碼算法實現的正確性、合規性提供核心保障&…

如何用Redis作為消息隊列

說明&#xff1a;以前背八股文&#xff0c;早就知道 Redis 可以作為消息隊列&#xff0c;本文介紹如何實現用 Redis 作為消息隊列。 介紹 這里直接介紹 yudao 框架中的實現。yudao 是一套現成的開源系統框架&#xff0c;里面集成了許多基礎功能&#xff0c;我們可以在這基礎上…

解決 uniapp 修改index.html文件不生效的問題

業務場景&#xff1a;需要在H5網站設置追蹤用戶行為&#xff08;即埋點&#xff09;的script代碼。 問題&#xff1a;無論如何修改根目錄下的index.html文件都不會生效 問題原因&#xff1a;在 manifest.json 文件中有個【web配置】—>【index.html模版路徑】&#xff0c;…

C語言第十一章內存在數據中的存儲

一.整數在內存中的存儲在計算機內存中&#xff0c;所有的數字都是以二進制來存儲的。整數也不例外&#xff0c;在計算機內存中&#xff0c;整數往往以補碼的形式來存儲數據。這是為什么呢&#xff1f;在早期計算機表示整數時&#xff0c;最高位為符號位。但是0卻有兩種表示形式…

K8s部署dashboard平臺和基本使用

Kubernetes 的默認 Dashboard 主要用于基本的資源查看與管理,如查看 Pod、Service 等資源的狀態,進行簡單的創建、刪除操作 。然而,在企業級復雜場景下,其功能顯得較為局限。 與之相比,開源的 Kubernetes Dashboard 增強版工具 ——Dashboard UI ,為用戶帶來了更強大的功…

JavaEE進階-文件操作與IO流核心指南

文章目錄JavaEE進階文件操作與IO流核心指南前言&#xff1a;為什么需要文件操作&#xff1f;一、java.io.File 類的基本用法1.1 文件路徑1.2 常用方法示例獲取文件信息創建和刪除文件目錄操作文件重命名和移動二、IO流的基本概念2.1 核心困境&#xff1a;字節流 vs. 字符流字節…

動手學深度學習03-線性神經網絡

動手學深度學習pytorch 參考地址&#xff1a;https://zh.d2l.ai/ 文章目錄動手學深度學習pytorch1-第03章-線性神經網絡1. 線性回歸1.1 什么是線性回歸&#xff1f;1.2 如何表示線性回歸的預測公式&#xff1f;2. 損失函數2.1 什么是損失函數&#xff1f;2.2 如何表示整個訓練集…

如何安全解密受限制的PDF文件

當你需要從PDF中復制一段文字用于報告或引用時&#xff0c;如果文件被禁止復制&#xff0c;解密后即可輕松提取內容&#xff0c;避免手動輸入的麻煩。它解壓后雙擊主程序即可運行&#xff0c;無需安裝&#xff0c;即開即用&#xff0c;十分便捷。建議先將界面語言切換為中文&am…

利用DeepSeek輔助編譯c#項目tinyxlsx生成xlsx文件

繼續在尋找比較快的xlsx寫入庫&#xff0c;從https://github.com/TinyXlsx/TinyXlsx/ 看到它的測試結果&#xff0c;比c的openXLSX快幾倍&#xff0c;就想試用一下&#xff0c;仔細一看&#xff0c;它是個c#項目&#xff0c;需要.NET 8.0。 于是上微軟網站下載了.NET 8.0 SDK&a…

構建現代高并發服務器:從內核機制到架構實踐

引言:高并發的挑戰與演進 在當今互聯網時代,高并發處理能力已成為服務器的核心競爭力。傳統的"一個連接一個線程"(Thread-per-Connection)模型由于資源消耗巨大、上下文切換成本高和可擴展性差,早已無法應對數萬甚至百萬級的并發連接需求。現代高并發服務器基于…

1SG10MHN3F74C2LG Intel Stratix 10 系列 FPGA

1SG10MHN3F74C2LG 是 Intel 推出的 Stratix 10 系列 FPGA 家族中的高端型號&#xff0c;它基于 Intel 與 TSMC 合作的 14 納米 FinFET 工藝制造&#xff0c;是面向超高性能計算、數據中心加速、5G 通信基礎設施、以及高端網絡設備的旗艦級可編程邏輯器件。這顆 FPGA 以極高的邏…

IIS訪問報錯:HTTP 錯誤 500.19 - Internal Server Error

無法訪問請求的頁面&#xff0c;因為該頁的相關配置數據無效。 由于權限不足而無法讀取配置文件解決辦法&#xff1a;文件夾添加用戶權限Everyone文件夾->鼠標右鍵->屬性->安全->組或用戶名->編輯->添加->錄入Everyone->檢查名稱->一路點確定

AI對口型唱演:科技賦能,開啟虛擬歌者新篇章

最近在短視頻平臺閑逛&#xff0c;發現不少朋友都在玩“AI對口型唱演”&#xff0c;這類視頻簡直成了新晉流量密碼。從熱門歌曲到經典臺詞&#xff0c;配上夸張的口型和表情&#xff0c;分分鐘就能沖上排行榜前排。不過問題也來了——市面上這么多專用軟件&#xff0c;到底哪家…

爬蟲逆向--Day16Day17--核心逆向案例3(攔截器關鍵字、路徑關鍵字、請求堆棧、連續請求)

一、入口定位入口定位-- 關鍵字搜索-- 方法關鍵字--最簡單&#xff0c;最高效的 排第一-- encrypt 加密-- decrypt 解密-- JSON.stringify 給一個JS對象做Json字符串處理的把一個對象轉換為Json字符串JSON.stringify({a:1,b:"2"}){"a":"1…

RuoYi-Vue3項目中Swagger接口測試404,端口問題解析排查

一 問題概述版本&#xff1a;ruoyi前后端分離版&#xff0c;ruoyi版本3.9.0 前端Vue3 后端Spring Boot 2.5.15 本地測試環境ruoyi界面中系統工具下的系統接口集成了Swagger&#xff0c;當對其頁面上的接口進行請求測試時卻發生了404報錯。具體表現如下圖二 問題排查 1、與Vue2進…

elasticsearch 7.x elasticsearch 使用scroll滾動查詢一頁,刪除一頁,影響后面滾動的查詢嗎

目錄 一 scroll說明 1.1 問題 1.2 scroll分頁的機制 1.3 案例分析 一 scroll說明 1.1 問題 elasticsearch 使用scroll滾動查詢一頁&#xff0c;刪除一頁&#xff0c;影響后面滾動的查詢嗎&#xff1f; 答案是&#xff1a; 在 Elasticsearch 中使用 Scroll API 進行“…

MacBook Pro M1升級Burp Suite2025.8

一、安裝最新Burp Suite2025.8 下載最新Burp Suite2025.8安裝包&#xff1a; Burp Suite Release Notes 下載安裝包后&#xff0c;雙擊安裝即可&#xff0c; 二、調整Burp Suite2025.8配置&#xff1b; 工具包下載地址&#xff1a;文件分享 將下載的jar包放到app目錄下即可 …

開發避坑指南(30):Vue3 表格動態增加刪除行解決方案

需求背景 在Vue3環境中&#xff0c;動態增加或者刪除表格的行&#xff0c;該怎么實現&#xff1f;如下圖&#xff1a;實現分析 不同于傳統js&#xff0c;jquery等框架的面向dom編程&#xff0c;vue中是面向數據編程。對變量的增刪自動綁定到dom節點的增刪上&#xff0c;所以在v…