JavaScript之集合Set操作的3類10種方法
集合Set是數(shù)學(xué)上的概念用在編程上,主要特點(diǎn)是組內(nèi)的所有元素均不重復(fù)。
一、Set 的創(chuàng)建及其唯一的屬性
Set的創(chuàng)建與Array等相同,使用關(guān)鍵詞new
- let exampleSet = new Set();
Set只有一項(xiàng)屬性即size.
- > exampleSet = new Set([1, 5, 8])
- Set(3) { 1, 5, 8 }
- > exampleSet.size
- 3
二、Set的內(nèi)建操作方法
Set內(nèi)建的操作方法包括:1)插入insertion 2) 刪除 deletion 3) contain包含三項(xiàng)
- // insertion
- > sampleSet.add(17)
- Set(1) { 17 }
- > sampleSet.add(19)
- Set(2) { 17, 19 }
- > // delete
- > sampleSet.add(101)
- Set(3) { 17, 19, 101 }
- > sampleSet.delete(101)
- true
- > sampleSet
- Set(2) { 17, 19 }
- > // contains
- undefined
- > sampleSet.has(19)
- true
- > sampleSet.has(101)
- false
三、Set其他非內(nèi)建但常用的操作
SET除去add, delete, has等基礎(chǔ)的內(nèi)建操作之外,我們較為常用的是 intersection(交集A*B),isSuperSet超集,Union并集等。
首先,交集的思路就是將setA與setB中的元素,setA*setB 并用contains做出判斷。
- function intersectSets(setA, setB) {
- let intersection = new Set();
- for (let ele of setB) {
- if (setA.has(ele)) {
- intersection.add(ele);
- }
- }
- return intersection;
- }
- let setA = new Set([9, 12, 13, 24]);
- let setB = new Set([2, 13, 17, 24]);
- console.log(intersectSets(setA, setB)); /// Set {2, 3}/
其次是并集setA + setB 只需要逐個(gè)添加進(jìn)來即可。
- function unionSet(setA, setB) {
- let union = new Set(setA);
- for (let elem of setB) {
- union.add(elem);
- }
- return union;
- }
- let setA = new Set([17, 23, 39, 47]),
- setB = new Set([29, 38]),
- setC = new Set([59]);
- console.log(unionSet(setA,setB));
- console.log(unionSet(setA,setC));
接著是差集,setA-setB將setB中的元素全部都刪除。
- function differenceSet(setA, setB) {
- let difference = new Set(setA);
- for (let ele of setB) {
- difference.delete(ele);
- }
- return difference;
- }
- let setA = new Set([35, 98, 56, 47]),
- setB = new Set([25, 47]);
- console.log(differenceSet(setA, setB));
最后是超集和子集,因?yàn)榛槟孢\(yùn)算,只需要寫一個(gè)函數(shù)即可,具體實(shí)現(xiàn),我們構(gòu)思其否定形式,只要setB中有一個(gè)元素而不在其內(nèi),則判定為非超集。
- function isSuperset(setA, subset) {
- for (let elem of subset) {
- if (!setA.has(elem)) {
- return false;
- }
- }
- return true;
- }
- let setA = new Set([23, 35, 47, 59]),
- setB = new Set([23, 35]),
- setC = new Set([67]);
- console.log(isSuperset(setA, setB));
- console.log(isSuperset(setA, setC));
以上從Set內(nèi)建操作 add, has, delete之外的 insection, union, difference, isSuperSet 四種操作。
四、具體應(yīng)用之?dāng)?shù)列查重
數(shù)列查重往往需要先排序再逐個(gè)檢查,但是用Set結(jié)構(gòu)就簡(jiǎn)單多了,只需要比較其數(shù)據(jù)長(zhǎng)度即可。
- function checkDuplicates(arr) {
- let mySet = new Set(arr);
- return mySet.size < arr.length;
- }
- checkDuplicates([11,27,38,49,52]); // false
- checkDuplicates([11,11,28,38,49,56]); // true
五、總結(jié)
以上就是Set集合操作的所有方法。