Inzicht in sets met JavaScript

Sets kunnen zeer krachtig zijn als u begrijpt hoe u ze moet gebruiken. Enkele toepassingen van sets zijn het oplossen van telproblemen, waarbij u wellicht het aantal manieren wilt vinden waarop u elementen kunt groeperen. 

Een andere toepassing zijn problemen waarbij u relaties tussen elementen moet vinden. De ECMAScript-specificatie bevat geen methoden voor het werken op sets op deze manier. Maar het is mogelijk om je eigen te maken. 

Wat volgt is een overzicht van settheorie met praktische toepassingen die u kunt gebruiken om de mogelijkheden van JavaScript uit te breiden en meer complexe problemen op te lossen.

Inhoud

  • Basics
  • Unie
  • kruispunt
  • Verschil
  • Symmetrisch verschil
  • Aanvulling
  • Beoordeling

Basics

Een set is een ongeordende verzameling elementen die allemaal uniek zijn. De lijst met alle werknemers op uw werk is bijvoorbeeld een set. Elke medewerker zou een element in de set zijn. In werkelijkheid zouden deze elementen worden opgeslagen met een ID- of socialezekerheidsnummer, omdat dit waarden zijn waarvan we zeker kunnen zijn dat ze uniek zijn. Merk op dat de volgorde van deze elementen niet relevant voor ons is, omdat het sorteren van ID's of burgerservicenummers geen betekenis heeft.  

We noemen onze set medewerkers de universele set omdat deze alle elementen bevat die in overweging worden genomen. Laten we ons een andere set voorstellen. Deze set is de lijst met werknemers van uw bedrijf die op de engineeringafdeling werken. Dit is een subset van onze medewerkersset omdat elk element in de engineeringset ook in de medewerkersset bestaat. Een andere subset is de lijst met werknemers die freelance aannemers zijn. Dit is hoe we deze sets in JavaScript zouden maken:

laat engineering = nieuwe Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); laat freelancers = nieuwe Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']);

Als u een andere persoon aan een van onze sets wilt toevoegen, gebruiken we de syntaxis set.add (value) en vervang reeks met de naam van onze set en waarde met de waarde van het element dat wordt toegevoegd. Als we proberen een element toe te voegen dat al in de set zit, zal het niet worden toegevoegd. Voorbeeld:

laat engineering = nieuwe Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); engineering.add (Gohan); console.log (engineering);

Hiermee wordt Set 'Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan '.

Op dit moment denk je misschien wat? Wat kan ik doen met deze informatie? Vervolgens zullen we zien hoe we op sets kunnen werken om enkele veelvoorkomende problemen op te lossen.

Unie

Wat als we alle medewerkers in ons bedrijf willen vinden die freelancers zijn of op de engineeringafdeling werken? We moeten de twee sets combineren en vervolgens dubbele namen verwijderen. Dit wordt de unie genoemd. 

De combinatie van twee sets is de set met elementen uit een set of uit beide sets. Merk op hoe elementen in onze engineeringset zich ook in de freelancers bevinden. Hier is een manier om de unie van beide sets te vinden:

laat engineering = nieuwe Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); laat freelancers = nieuwe Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); let union = new Set ([... engineering, ... freelancers]); console.log (vakbond);

De ... operator verandert onze set in een array en na het combineren van de twee arrays, de set constructor verwijdert de dubbele elementen. De unie van de twee sets zal Set 'Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan ',' Piccolo ',' Vegeta ',' Goku '.

Taak

Wat is de eenheid van de sets [1, 3, 5, 7, 9] en [2, 3, 4, 6]?

kruispunt

Stel dat we alle medewerkers willen vinden die op de engineeringafdeling zitten en freelancers zijn. Dit is de kruising van de sets. De kruising van twee sets is de set met elementen in beide sets. 

Om dit te reproduceren kunnen we door de ene set zoeken en controleren of elk element in de andere set zit. Om te controleren of een element zich in een set bevindt, gebruiken we de heeft methode. Voorbeeld:

laat engineering = nieuwe Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); console.log (engineering.has ( 'Alberta'));

Dit zou terugkeren waar. De ... gebruiken heeft methode, kunnen we onze engineering-set filteren voor items die ook in de freelancers zijn ingesteld.

laat engineering = nieuwe Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); laat freelancers = nieuwe Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); let intersection = new Set ([... engineering] .filter (x => freelancers.has (x))); console.log (knooppunt);

Het snijpunt van engineering en freelancers is Set 'Trunks', 'Gohan'.

Taak

Wat is de kruising van de sets [1, 3, 5, 7, 9] en [2, 3, 4, 6]?

Verschil

Laten we het scenario bekijken waarin we de technici willen vinden die geen freelancers zijn. Dit is het verschil. Het verschil tussen twee sets is de set met elementen die in de eerste set staan, maar niet in de tweede set. 

Voor ons betekent dit dat we met onze engineeringset beginnen en vervolgens alle elementen verwijderen die ook in de freelancers zitten. Voorbeeld:

laat engineering = nieuwe Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); laat freelancers = nieuwe Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); let difference = new Set ([... engineering] .filter (x =>! freelancers.has (x))); console.log (verschil);

Het verschil tussen de technische set en de freelancers is Set 'Alberta', 'Dr. Gero ',' Bulma '. Als we de lijst willen zien van mensen die freelancers zijn en geen ingenieurs, beginnen we met de freelancers die de elementen instellen en verwijderen die in de ingenieursset voorkomen. Voorbeeld:

let difference = new Set ([... freelancers] .filter (x =>! engineering.heeft (x))); console.log (verschil);

Dit geeft ons een ander resultaat. Het verschil tussen de set freelancers en de technische set is Set 'Piccolo', 'Vegeta', 'Goku'.

Taak

Zoek het verschil van [1, 3, 5, 7, 9] en [2, 3, 4, 6].

Zoek het verschil van [2, 3, 4, 6] en [1, 3, 5, 7, 9].

Symmetrisch verschil

Nu willen we graag weten wie in het bedrijf ingenieur of freelancer is, maar niet allebei. Dit is het symmetrische verschil. Het symmetrische verschil van twee sets is de set met elementen uit beide sets, maar niet uit beide sets. 

Een benadering die we zouden kunnen gebruiken, is om de unie van de twee sets te vinden (iedereen die een ingenieur, freelancer of beide is) en de kruising af te trekken (iedereen die zowel een ingenieur als een freelancer is). Door de technieken te combineren die we eerder hebben gebruikt, kunnen we het symmetrische verschil met de volgende code krijgen:

laat engineering = nieuwe Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); laat freelancers = nieuwe Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); let union = new Set ([... engineering, ... freelancers]); let intersection = new Set ([... engineering] .filter (x => freelancers.has (x))) laat symmetricDifference = new Set ([... union] .filter (x =>! intersection.has (x))); console.log (symmetrisch verschil);

Het symmetrische verschil tussen onze technische set en onze freelancers-set is Set 'Alberta', 'Dr. Gero ',' Bulma ',' Piccolo ',' Vegeta ',' Goku '.

Taak

Zoek het symmetrische verschil van [1, 3, 5, 7, 9] en [2, 3, 4, 6].

Aanvulling

Als we onze set werknemers en een aantal technici hebben, hoe kunnen we dan de set van alle mensen vinden die geen ingenieur zijn? Een ding dat we zouden kunnen doen is de ingenieursset aftrekken van de werknemersset. Deze set is de aanvulling op onze ingenieurs in relatie tot onze medewerkers. Voorbeeld:

laat werknemers = ['Alberta', 'Dr. Gero, Trunks, Bulma, Gohan, Goku, Piccolo, Vegeta; laat engineering = nieuwe Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); laat complement = new Set ([... employees] .filter (x =>! engineering.heeft (x))); console.log (complement);

De aanvulling op de engineeringset in relatie tot onze medewerkers is Set 'Goku', 'Piccolo', 'Vegeta'.

Taak

Gezien de universele reeks [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], vind je het complement om in te stellen [2, 4, 6, 8, 10].

Beoordeling

Sets zijn handig wanneer u verschillende lijsten moet vergelijken, lijsten moet combineren of unieke elementen in een lijst moet vinden. De volgende keer dat u een probleem hebt waarbij u op deze manier gegevens moet analyseren, kunt u overwegen om een ​​van de bovenvermelde setbewerkingen te gebruiken. Hier is een lijst met de belangrijkste termen die zijn besproken:

  • Set: een verzameling unieke, ongeordende elementen.
  • Universele set: alle mogelijke elementen van een set.
  • Subset: een kleinere set binnen een set.
  • Unie van sets A en B: de set die elementen bevat in A, B of beide.
  • Snijpunt van sets A en B: de set met elementen van zowel A als B.
  • Verschil tussen de sets A en B: de set met elementen in A maar niet in B.
  • Symmetrisch verschil tussen de sets A en B: de set met elementen in A of B, maar niet beide.
  • Aanvulling van set A: de elementen in de universele set die niet in A zijn.

Zoals gebruikelijk, onthoud als je op zoek bent naar extra middelen om te studeren of om te gebruiken in je werk, bekijk wat we beschikbaar hebben op de Envato-markt.