男女做爽爽爽网站-男女做羞羞高清-男女做爰高清无遮挡免费视频-男女做爰猛烈-男女做爰猛烈吃奶啪啪喷水网站-内射白浆一区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

解鎖JavaScript中的Set:數(shù)據(jù)處理的隱藏利器


2025年5月10日 15:3 本文熱度 172

在JavaScript開(kāi)發(fā)中,數(shù)組作為最常用的數(shù)據(jù)結(jié)構(gòu)之一,幾乎無(wú)處不在。然而,Set作為一種更高效且功能強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),卻常常被開(kāi)發(fā)者忽視。隨著TC39 Set提案中新增方法的引入,Set的功能得到了進(jìn)一步擴(kuò)展,使其在處理數(shù)據(jù)集合時(shí)更加靈活和高效。本文將深入探討Set的起源、核心功能、新增方法以及其在實(shí)際開(kāi)發(fā)中的應(yīng)用場(chǎng)景,幫助你全面掌握這一被低估的JavaScript利器。


· · ·

一、Set的起源與背景

1.1 ES6的革新:Set的誕生

Set是在2015年隨著ECMAScript 6(ES6)的發(fā)布而引入的。在此之前,開(kāi)發(fā)者主要依賴數(shù)組來(lái)管理數(shù)據(jù)集合,但數(shù)組在處理唯一性和查找效率方面存在明顯短板:

  • 重復(fù)值問(wèn)題:數(shù)組允許存儲(chǔ)重復(fù)值,導(dǎo)致唯一性檢查需要額外的邏輯。
  • 低效的存在性檢查:查找數(shù)組中是否存在某個(gè)元素需要線性搜索(如Array.includes),時(shí)間復(fù)雜度為O(n),對(duì)于大型數(shù)據(jù)集來(lái)說(shuō)性能較差。

Set的引入正是為了解決這些問(wèn)題。它提供了一種專門用于存儲(chǔ)唯一值的數(shù)據(jù)結(jié)構(gòu),并優(yōu)化了添加、刪除和查找操作,使代碼更簡(jiǎn)潔、更高效。


· · ·

二、Set的核心特性

2.1 什么是Set?

Set是一種存儲(chǔ)唯一值的數(shù)據(jù)結(jié)構(gòu),這意味著它不會(huì)存儲(chǔ)重復(fù)的元素。以下是一個(gè)簡(jiǎn)單的示例:

const mySet = new Set();  
mySet.add(1);  
mySet.add(2);  
mySet.add(2); // 重復(fù)值,會(huì)被忽略  
  
console.log(mySet); // 輸出: Set(2) { 1, 2 }

Set可以存儲(chǔ)任何類型的值,包括原始類型和對(duì)象:

const mixedSet = new Set([1'hello', { key'value' }, true]);  
console.log(mixedSet); // 輸出: Set(4) { 1, 'hello', { key: 'value' }, true }

2.2 Set的常見(jiàn)應(yīng)用場(chǎng)景

  • 去重:快速去除數(shù)組中的重復(fù)值。
  • 存在性檢查:高效判斷某個(gè)值是否存在于集合中。
  • 數(shù)據(jù)集合操作:如并集、交集、差集等。

· · ·

三、Set的基本方法

3.1 add(value)

Set中添加一個(gè)值(如果值已存在,則忽略):

const mySet = new Set();  
mySet.add(1);  
mySet.add(2);  
console.log(mySet); // 輸出: Set(2) { 1, 2 }

3.2 delete(value)

Set中刪除指定的值:

mySet.delete(1);  
console.log(mySet); // 輸出: Set(1) { 2 }

3.3 has(value)

檢查Set中是否存在某個(gè)值:

console.log(mySet.has(2)); // 輸出: true  
console.log(mySet.has(3)); // 輸出: false

3.4 size

返回Set中元素的數(shù)量:

console.log(mySet.size); // 輸出: 1

3.5 clear()

清空Set中的所有元素:

mySet.clear();  
console.log(mySet.size); // 輸出: 0

3.6 遍歷Set

Set是可迭代的,可以通過(guò)for...offorEach進(jìn)行遍歷:

const mySet = newSet([123]);  

for (const value of mySet) {  
console.log(value);  
}  
// 輸出:  
// 1  
// 2  
// 3  

mySet.forEach(value =>console.log(value));  
// 輸出:  
// 1  
// 2  
// 3

· · ·

四、Set的進(jìn)階功能:TC39提案新增方法

TC39提案為Set引入了多個(gè)新方法,使其在處理集合操作時(shí)更加高效和直觀。

4.1 union

使用場(chǎng)景:合并兩個(gè)集合,去除重復(fù)值。

const viewedRecommendations = new Set([301302303]);  
const topSelling = new Set([303304305]);  
  
const combinedRecommendations = viewedRecommendations.union(topSelling);  
console.log(combinedRecommendations); // 輸出: Set(5) { 301, 302, 303, 304, 305 }

4.2 intersection

使用場(chǎng)景:查找兩個(gè)集合的交集。

const promotionProducts = new Set([401402403]);  
const viewedProducts = new Set([402403404]);  
  
const productsToHighlight = promotionProducts.intersection(viewedProducts);  
console.log(productsToHighlight); // 輸出: Set(2) { 402, 403 }

4.3 difference

使用場(chǎng)景:計(jì)算兩個(gè)集合的差集。

const viewedProducts = new Set([501502503]);  
const cartProducts = new Set([503]);  
  
const notInCart = viewedProducts.difference(cartProducts);  
console.log(notInCart); // 輸出: Set(2) { 501, 502 }

4.4 symmetricDifference

使用場(chǎng)景:查找兩個(gè)集合的對(duì)稱差集。

const warehouseA = new Set([601602603]);  
const warehouseB = new Set([603604605]);  
  
const uniqueToEachWarehouse = warehouseA.symmetricDifference(warehouseB);  
console.log(uniqueToEachWarehouse); // 輸出: Set(4) { 601, 602, 604, 605 }

4.5 isSupersetOf 和 isSubsetOf

使用場(chǎng)景:檢查一個(gè)集合是否包含另一個(gè)集合。

const inventory = new Set([801802803804]);  
const cart = new Set([802803]);  
  
console.log(inventory.isSupersetOf(cart)); // true  
console.log(cart.isSubsetOf(inventory)); // true

4.6 isDisjointFrom

使用場(chǎng)景:檢查兩個(gè)集合是否沒(méi)有交集。

const restrictedPaymentMethods = new Set(['Paypal''Credit Card']);  
const userPaymentMethod = new Set(['Gift Card']);  
if (userPaymentMethod.isDisjointFrom(restrictedPaymentMethods)) {  
    console.log('Method not allowed');  
// Method not allowed

· · ·

五、Set與數(shù)組的性能對(duì)比

5.1 時(shí)間復(fù)雜度

Set在添加、刪除和查找操作上的時(shí)間復(fù)雜度為O(1),而數(shù)組的這些操作通常需要O(n)。對(duì)于大型數(shù)據(jù)集,Set的性能優(yōu)勢(shì)尤為明顯。

5.2 適用場(chǎng)景

  • 使用Set:當(dāng)需要快速查找、去重或頻繁添加/刪除元素時(shí)。
  • 使用數(shù)組:當(dāng)需要按索引訪問(wèn)元素或維護(hù)元素順序時(shí)。

· · ·

六、總結(jié)

Set作為JavaScript中一種強(qiáng)大的數(shù)據(jù)結(jié)構(gòu),在處理唯一值集合時(shí)表現(xiàn)出色。隨著TC39提案新增方法的引入,Set的功能得到了進(jìn)一步擴(kuò)展,使其在并集、交集、差集等操作中更加高效。如果你經(jīng)常使用數(shù)組并希望優(yōu)化代碼性能,Set無(wú)疑是一個(gè)值得嘗試的選擇。通過(guò)掌握Set的核心功能和新增方法,你可以在開(kāi)發(fā)中更高效地處理數(shù)據(jù)集合,提升代碼質(zhì)量和性能。


· · ·

原文地址:https://medium.com/@olivier.lelay/set-an-underrated-power-of-javascript-a53aa712d464?source=rss------javascript_tips-5


該文章在 2025/5/10 18:27:37 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 久久久久久久精品免费看 | 久久天天综合 | 国产l精品国产亚洲区久久 国产l精品国产亚洲区在线 | 四虎永久免费影院在线 | 国产精品夜夜春夜夜爽久久小说 | a级成人毛片免费在线观看 a级成人免费毛 | 少妇肥臀白浆一区二区三区 | 国产精品久久久久久99人妻绯闻 | 99视频免费在线 | 久久久久久久久久免免费精品 | 国产三级av国片免费 | 激情啪啪精品一区二区 | 99re热视频精品免费观看 | 国产不卡高清在线观看视频 | 无人区大片中文字幕在线 | 久久久av久av久片一区二区 | 亚洲伊人久久在 | 九九九九在线视频播放 | 国产人妻精品无码AV | 亚洲精品国产一区二区在线 | 伊人久久大香网 | 日本激情特黄A级激情视频 日韩一区二区三区视频在线观看 | 亚洲桃色天堂网 | 国产成人精品女人久久久国产suv精品一区二区6 | 美国毛片免费观看 | 欧美日韩在线 | 国产亚洲综合激情校园小说 | 无码人妻AV一区二区三区蜜臀 | 国产精品69白浆在线观看免费 | 一级在线视频 | 日本理伦片午夜理伦 | WWW国产精品内射老熟女 | 美女张开腿给男人桶爽久久 | 国产麻豆va精品视频 | 亚洲中文字幕无码日韩 | 一级黄色片 | 四虎国产精品永久免费网址 | 国产精品无码中出一区二区三区 | 国产麻豆老师在线观看 | 久996视频精品免费观看 | 欧美做爰猛烈动高潮视频 |