Satser kan vara mycket kraftfulla om du förstår hur du använder dem. Några tillämpningar av uppsättningar inkluderar att lösa räkna problem där du kanske vill hitta hur många sätt du kan gruppera elementen tillsammans.
En annan applikation är problem som kräver att du hittar relationer mellan element. ECMAScript-specifikationen omfattar inte metoder för drift på uppsättningar på detta sätt. Men det är möjligt att skapa din egen.
Det som följer är en översikt över uppsättningsteori med praktiska tillämpningar som du kan använda för att utöka JavaScript-funktionerna och lösa mer komplexa problem.
En uppsättning är en orörd uppsättning av element som är helt unika. Till exempel är listan över alla anställda på ditt arbete en uppsättning. Varje anställd skulle vara ett element i uppsättningen. I själva verket skulle dessa element lagras med ett ID eller socialt säkerhetsnummer eftersom dessa är värden vi kan se kommer att vara unika. Observera hur ordningen av dessa element är irrelevant för oss eftersom sorterings-ID eller nummer för socialt säkerhet inte har någon betydelse.
Vi kallar vår uppsättning anställda den universella uppsättningen eftersom den innehåller alla de faktorer som behandlas. Låt oss föreställa oss en annan uppsättning. Denna uppsättning är listan över anställda hos ditt företag som arbetar inom ingenjörsavdelningen. Detta är en delmängd av våra anställdas uppsättning, eftersom varje element i konstruktionsuppsättningen också finns i anställdsuppsättningen. En annan delmängd är listan över anställda som är frilansarbetare. Så här skapar vi dessa uppsättningar i JavaScript:
låt engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); låt freelancers = ny Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']);
Om du vill lägga till en annan person i en av våra uppsättningar, använder vi syntaxen set.add (värde)
och ersätt uppsättning
med namnet på vårt set och värde
med värdet av elementet som läggs till. Om vi försöker lägga till ett element som redan finns i uppsättningen kommer det inte att läggas till. Exempel:
låt engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); engineering.add ( 'Gohan'); console.log (engineering);
Detta kommer att skrivas ut Set 'Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan '.
Just nu kanske du tänker så vad? Vad kan jag göra med denna information? Nästa kommer vi se hur vi kan arbeta på uppsättningar för att hjälpa oss att lösa några vanliga problem.
Vad händer om vi vill hitta alla anställda i vårt företag som är frilansare eller som arbetar inom ingenjörsavdelningen? Vi skulle behöva kombinera de två uppsättningarna och ta bort eventuella dubbla namn. Detta kallas facket.
Sammansättningen av två uppsättningar är den uppsättning som innehåller element från antingen uppsättning eller båda uppsättningar. Lägg märke till hur element i vår tekniska uppsättning också ligger i frilansarna. Här är ett sätt att hitta facket i båda uppsättningarna:
låt engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); låt freelancers = ny Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); låt union = ny Set ([... engineering, ... freelancers]); console.log (union);
De ...
operatören vänder vårt uppsättning till en array, och efter att ha kombinerat de två arraysna, Uppsättning
konstruktören tar bort de dubbla elementen. Sammansättningen av de två uppsättningarna kommer att vara Set 'Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan ',' Piccolo ',' Vegeta ',' Goku '.
Vad är sammansättningen av uppsättningarna [1, 3, 5, 7, 9] och [2, 3, 4, 6]?
Antag att vi vill hitta alla anställda som är inom ingenjörsavdelningen och är frilansare. Detta är skärningspunkten för uppsättningarna. Korsningen av två uppsättningar är uppsättningen innehållande element i båda uppsättningarna.
För att reproducera detta kan vi söka igenom en uppsättning och kontrollera om varje element ligger i den andra uppsättningen. För att kontrollera om ett element är i en uppsättning använder vi har
metod. Exempel:
låt engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); console.log (engineering.has ( 'Alberta'));
Detta skulle återvända sant. Använda har
metod kan vi filtrera vår tekniska uppsättning för föremål som också finns i frilansare.
låt engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); låt freelancers = ny Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); låt korsningen = ny Set ([... engineering] .filter (x => freelancers.has (x))); console.log (skärningspunkt);
Korsningen av ingenjörer och frilansare är Set 'Trunks', 'Gohan'.
Vad är skärningspunkten mellan uppsättningarna [1, 3, 5, 7, 9] och [2, 3, 4, 6]?
Låt oss överväga det scenario där vi vill hitta ingenjörer som inte är frilansare. Detta är skillnaden. Skillnaden mellan två uppsättningar är den uppsättning som innehåller element som ligger i den första uppsättningen men inte i den andra uppsättningen.
För oss betyder det att vi kommer att börja med vår tekniska uppsättning, och ta bort alla element som också finns i de frilansare som är inställda. Exempel:
låt engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); låt freelancers = ny Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); låt skillnad = ny Set ([... engineering] .filter (x =>! freelancers.has (x))); console.log (skillnad);
Skillnaden mellan ingenjörsuppsättningen och freelancersatsen är Set 'Alberta', 'Dr. Gero ',' Bulma '. Om vi vill få listan över personer som är frilansare och ingen ingenjörer, börjar vi med de frilansare som sätts och tar bort elementen som visas i ingenjörsuppsättningen. Exempel:
låt skillnad = ny Set ([freelancers] .filter (x =>! engineering.has (x))); console.log (skillnad);
Detta ger oss ett annat resultat. Skillnaden mellan de frilansare som ställs och verkställningssatsen är Set 'Piccolo', 'Vegeta', 'Goku'.
Hitta skillnaden mellan [1, 3, 5, 7, 9] och [2, 3, 4, 6].
Hitta skillnaden mellan [2, 3, 4, 6] och [1, 3, 5, 7, 9].
Nu vill vi hitta vem i företaget är en ingenjör eller en frilansare, men inte båda. Detta är den symmetriska skillnaden. Den symmetriska skillnaden mellan två uppsättningar är den uppsättning som innehåller element från antingen uppsättning, men inte båda uppsättningarna.
Ett tillvägagångssätt vi kan använda är att hitta facket i de två uppsättningarna (alla som är ingenjör, frilansare eller båda) och subtrahera korsningen (alla som är både ingenjör och frilansare). Genom att kombinera de tekniker vi använde tidigare kan vi få den symmetriska skillnaden med följande kod:
låt engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); låt freelancers = ny Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); låt union = ny Set ([... engineering, ... freelancers]); låt korsningen = ny Set ([... engineering] .filter (x => freelancers.has (x))) låt symmetrisk skillnad = ny uppsättning ([... union] .filter (x =>! intersection.has (x))); console.log (symmetricDifference);
Den symmetriska skillnaden i vår tekniska uppsättning och våra frilansare är Set 'Alberta', 'Dr. Gero ',' Bulma ',' Piccolo ',' Vegeta ',' Goku '.
Hitta den symmetriska skillnaden mellan [1, 3, 5, 7, 9] och [2, 3, 4, 6].
Om vi har vår uppsättning anställda och en uppsättning ingenjörer, hur kan vi hitta uppsättningen av alla som inte är ingenjörer? En sak vi kan göra är att dra ner ingenjörerna från de anställda. Denna uppsättning är komplementet till våra ingenjörer i förhållande till våra anställdas uppsättning. Exempel:
låt anställda = ['Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan ',' Goku ',' Piccolo ',' Vegeta ']; låt engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); låt komplement = ny Set ([... anställda] .filter (x =>! engineering.has (x))); console.log (komplement);
Komplementet till konstruktionsuppsättningen i förhållande till våra anställda är Set 'Goku', 'Piccolo', 'Vegeta'.
Med tanke på universell uppsättning [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], hitta komplementet till set [2, 4, 6, 8, 10].
Satser är till nytta när du behöver jämföra olika listor, kombinera listor eller hitta unika element i en lista. Nästa gång du har ett problem där du behöver analysera data på detta sätt, överväg att använda en av de angivna operationerna som nämns ovan. Här är en lista över de nyckelord som diskuterades:
Som vanligt, kom ihåg om du letar efter ytterligare resurser att studera eller använda i ditt arbete, kolla vad vi har tillgängligt på Envato-marknaden.