終于!當(dāng) set 過去被引入時(shí),它已經(jīng)讓我們的生活變得更好了。我們能夠輕松生成獨(dú)特的列表,而且在查找和設(shè)置這些列表上的項(xiàng)目方面也有更好的性能。
那太好了,但我們?nèi)匀蝗鄙倨渌Z言所擁有的一些東西。這是真的,因?yàn)槲覀兙褪沁@樣。隨著 2024 年 set 中添加新的組合方法,我們最終將能夠通過簡單的調(diào)用進(jìn)行并集、交集、差集等操作。
事不宜遲,讓我們開始吧。
不同之處
返回一個(gè)新的 set,其中包含第一個(gè) set 中存在但第二個(gè) set 中不存在的元素。
示例:您想查看本周哪些用戶訪問了上個(gè)月沒有訪問過的網(wǎng)站。
如何使用?
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 }
登錄后復(fù)制
過去我們會怎么做?
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]
登錄后復(fù)制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/difference
路口
返回一個(gè)新的 set,其中僅包含兩個(gè) set 中都存在的值。
示例:您正在將電子書捆綁添加到購物車,但您已經(jīng)有其中一些書籍了。
如何使用?
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 }
登錄后復(fù)制
過去我們會怎么做?
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]
登錄后復(fù)制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/intersection
對稱差
返回一個(gè)新的 set,其值在兩個(gè)組中都不重復(fù)。
示例:檢查商店之間積壓的商品,以查看哪些商品可以換貨。
如何使用?
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 }
登錄后復(fù)制
過去我們會怎么做?
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]
登錄后復(fù)制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/symmetrydifference
聯(lián)盟
返回一個(gè)新的 set,其中包含兩個(gè)組中的值,但不重復(fù)任何值。
示例:您和您的朋友想要合并播放列表,但有些音樂是相同的。
如何使用?
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 }
登錄后復(fù)制
過去我們會怎么做?
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]
登錄后復(fù)制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/union
是不相交的嗎?
它返回一個(gè)布爾值。如果兩個(gè) set 沒有共同值,則為 true;如果它們至少有一個(gè)共同值,則為 false。
示例:查看有屬于其他組的產(chǎn)品。
如何使用?
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
登錄后復(fù)制
過去我們會怎么做?
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
登錄后復(fù)制
了解更多信息:https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/set/isdisjointfrom
是超集/子集嗎?
這兩個(gè)功能非常相似。它們都返回布爾值,并且是直接相反的。如果該 set 是另一個(gè) set 的超集,superset 將返回 true;如果 set 是另一個(gè) set 的子集,subset 將返回 true。
我將這些函數(shù)放在一起,因?yàn)橹榔渲幸粋€(gè)函數(shù)的答案就足以了解另一個(gè)函數(shù)。 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
登錄后復(fù)制
過去我們會怎么做?
const itDepartment = [1, 2, 3, 4]; const genZFromToronto = [3, 4]; console.log(genZFromToronto.every(item => itDepartment.includes(item))); // true
登錄后復(fù)制
了解更多:
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
現(xiàn)在你已經(jīng)準(zhǔn)備好了我不后悔在你的項(xiàng)目中使用它!
如果您也對它、另一個(gè)功能感到興奮,或者想了解其他內(nèi)容,請告訴我。直到下次o/






