終于!當 set 過去被引入時,它已經讓我們的生活變得更好了。我們能夠輕松生成獨特的列表,而且在查找和設置這些列表上的項目方面也有更好的性能。
那太好了,但我們仍然缺少其他語言所擁有的一些東西。這是真的,因為我們就是這樣。隨著 2024 年 set 中添加新的組合方法,我們最終將能夠通過簡單的調用進行并集、交集、差集等操作。
事不宜遲,讓我們開始吧。
不同之處
返回一個新的 set,其中包含第一個 set 中存在但第二個 set 中不存在的元素。
示例:您想查看本周哪些用戶訪問了上個月沒有訪問過的網站。
如何使用?
const thisweekusers = new set([1, 2, 3, 4]); const lastmonthusers = new set([3, 4, 5, 6]); const newusers = thisweekusers.difference(lastmonthusers); console.log(newusers); // set(2) { 1, 2 }
登錄后復制
過去我們會怎么做?
const thisweekusers = [1, 2, 3, 4]; const lastmonthusers = [3, 4, 5, 6]; let newusers = thisweekusers.filter(x => !lastmonthusers.includes(x)); console.log(newusers); // (2) [1,2]
登錄后復制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/difference
路口
返回一個新的 set,其中僅包含兩個 set 中都存在的值。
示例:您正在將電子書捆綁添加到購物車,但您已經有其中一些書籍了。
如何使用?
const booksbundle = new set([1, 2, 3, 4]); const cart = new set([3, 4, 5, 6]); const bookstoadd = booksbundle.intersection(cart); console.log(bookstoadd); // set(2) { 3, 4 }
登錄后復制
過去我們會怎么做?
const booksbundle = [1, 2, 3, 4]; const cart = [3, 4, 5, 6]; const bookstoadd = booksbundle.filter(book => cart.includes(book)); console.log(bookstoadd); // (2) [3, 4]
登錄后復制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/intersection
對稱差
返回一個新的 set,其值在兩個組中都不重復。
示例:檢查商店之間積壓的商品,以查看哪些商品可以換貨。
如何使用?
const firststore = new set([1, 2, 3, 4]); const secondstore = new set([3, 4, 5, 6]); const overstockeditems = firststore.symmetricdifference(secondstore); console.log(overstockeditems); // set(4) { 1, 2, 5, 6 }
登錄后復制
過去我們會怎么做?
const firststore = [1, 2, 3, 4]; const secondstore = [3, 4, 5, 6]; const allitems = [firststore, secondstore].flat(); const overstockeditems = allitems.filter(item => { return !firststore.includes(item) || !secondstore.includes(item); }); console.log(overstockeditems); // (4) [1, 2, 5, 6]
登錄后復制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/symmetrydifference
聯盟
返回一個新的 set,其中包含兩個組中的值,但不重復任何值。
示例:您和您的朋友想要合并播放列表,但有些音樂是相同的。
如何使用?
const yourplaylist = new set([1, 2, 3, 4]); const friendplaylist = new set([3, 4, 5, 6]); const mergedplaylist = yourplaylist.union(friendplaylist); console.log(mergedplaylist); // set(6) { 1, 2, 3, 4, 5, 6 }
登錄后復制
過去我們會怎么做?
const yourplaylist = [1, 2, 3, 4]; const friendplaylist = [3, 4, 5, 6]; const mergedplaylist = new set([yourplaylist, friendplaylist].flat()); console.log(mergedplaylist); // (6) [1, 2, 3, 4, 5, 6]
登錄后復制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/union
是不相交的嗎?
它返回一個布爾值。如果兩個 set 沒有共同值,則為 true;如果它們至少有一個共同值,則為 false。
示例:查看有屬于其他組的產品。
如何使用?
const electronics = new set([1, 2, 3, 4]); const furniture = new set([3, 4, 5, 6]); const groceries = new set(['apple']); console.log(electronics.isdisjointfrom(furniture)); // false console.log(electronics.isdisjointfrom(groceries)); // true
登錄后復制
過去我們會怎么做?
const electronics = [1, 2, 3, 4]; const furniture = [3, 4, 5, 6]; const groceries = ['apple']; function isdisjoint(array1, array2) { return array1.every(item => !array2.includes(item)); } console.log(isdisjoint(electronics, furniture)); // false console.log(isdisjoint(electronics, groceries)); // true
登錄后復制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/isdisjointfrom
是超集/子集嗎?
這兩個功能非常相似。它們都返回布爾值,并且是直接相反的。如果該 set 是另一個 set 的超集,superset 將返回 true;如果 set 是另一個 set 的子集,subset 將返回 true。
我將這些函數放在一起,因為知道其中一個函數的答案就足以了解另一個函數。 set 只能是子集 set 的超集。
示例:了解用戶是否屬于公司群組。
如何使用?
const itdepartment = new set([1, 2, 3, 4]); const genzfromtoronto = new set([3, 4]); console.log(itdepartment.issupersetof(genzfromtoronto)); // true console.log(genzfromtoronto.issubsetof(itdepartment)); // true
登錄后復制
過去我們會怎么做?
const itDepartment = [1, 2, 3, 4]; const genZFromToronto = [3, 4]; console.log(genZFromToronto.every(item => itDepartment.includes(item))); // true
登錄后復制
了解更多:
https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/issupersetof
https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/issubsetof
現在你已經準備好了我不后悔在你的項目中使用它!
如果您也對它、另一個功能感到興奮,或者想了解其他內容,請告訴我。直到下次o/