Sett kan være veldig kraftig hvis du forstår hvordan du bruker dem. Noen få bruksområder inkluderer å løse telleproblemer der du kanskje vil finne antall måter du kan gruppere elementer sammen.
Et annet program er problemer som krever at du finner relasjoner mellom elementer. ECMAScript-spesifikasjonen inneholder ikke metoder for drift på sett på denne måten. Men det er mulig å lage din egen.
Det som følger er en oversikt over settteori med praktiske applikasjoner du kan bruke til å utvide mulighetene til JavaScript og løse mer komplekse problemer.
Et sett er en uordnet samling av elementer som er helt unike. For eksempel er listen over alle ansatte i ditt arbeid et sett. Hver ansatt ville være et element i settet. I virkeligheten vil disse elementene bli lagret ved hjelp av et ID eller personnummer fordi disse verdiene vi kan sikre, vil være unike. Legg merke til hvordan rekkefølgen av disse elementene er irrelevant for oss, fordi sorterings-IDer eller personnummer har ingen betydning.
Vi kaller vårt sett med ansatte det universelle settet fordi det inneholder alle elementene som er under vurdering. La oss forestille oss et annet sett. Dette settet er listen over ansatte i din bedrift som jobber i ingeniøravdelingen. Dette er en delmengde av vårt ansattes sett fordi alle elementene i verkstedet også finnes i ansattes sett. En annen delmengde er listen over ansatte som er frilansentreprenører. Her er hvordan vi lager disse settene i JavaScript:
la engineering = ny Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); la freelancers = new Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']);
Hvis du vil legge til en annen person i et av settene våre, bruker vi syntaksen set.add (verdi)
og erstatte sett
med navnet på vårt sett og verdi
med verdien av elementet blir lagt til. Hvis vi prøver å legge til et element som allerede er i settet, blir det ikke lagt til det. Eksempel:
la engineering = ny Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); engineering.add ( 'Gohan'); console.log (Engineering);
Dette vil skrive ut Set 'Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan '.
Akkurat nå kan du tenke så hva? Hva kan jeg gjøre med denne informasjonen? Deretter vil vi se hvordan vi kan operere på sett for å hjelpe oss med å løse noen vanlige problemer.
Hva om vi vil finne alle de ansatte i vårt firma som er frilansere eller som jobber i ingeniøravdelingen? Vi må kombinere de to settene, og fjern deretter eventuelle dupliserte navn. Dette kalles foreningen.
Foreningen av to sett er settet som inneholder elementer fra enten sett eller begge sett. Legg merke til hvordan elementene i vårt tekniske sett også er i freelancersettet. Her er en måte du kan finne foreningen til begge settene:
la engineering = ny Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); la freelancers = new Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); la union = ny Set ([... engineering, ... freelancers]); console.log (union);
De ...
operatør gjør vårt sett til en matrise, og etter å ha kombinert de to arrays, Sett
konstruktør fjerner de dupliserte elementene. Sammenslutningen av de to settene vil bli satt 'Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan ',' Piccolo ',' Vegeta ',' Goku '.
Hva er foreningen av settene [1, 3, 5, 7, 9] og [2, 3, 4, 6]?
Anta at vi vil finne alle de ansatte som er i ingeniøravdelingen og er frilansere. Dette er skjæringspunktet mellom settene. Krysset mellom to sett er settet som inneholder elementer i begge settene.
For å reprodusere dette kan vi søke gjennom et sett og kontrollere om hvert element er i det andre settet. For å sjekke om et element er i et sett, bruker vi har
metode. Eksempel:
la engineering = ny Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); console.log (engineering.has ( 'Alberta'));
Dette ville returnere sant. Bruker har
Metode, vi kan filtrere vår engineering sett for elementer som også er i freelancers sett.
la engineering = ny Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); la freelancers = new Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); la krysset = nytt sett ([... engineering] .filter (x => freelancers.has (x))); console.log (kryss);
Krysset mellom ingeniører og frilansere er Set 'Trunks', 'Gohan'.
Hva er skjæringspunktet for settene [1, 3, 5, 7, 9] og [2, 3, 4, 6]?
La oss vurdere scenariet der vi ønsker å finne ingeniører som ikke er frilansere. Dette er forskjellen. Forskjellen mellom to sett er settet som inneholder elementer som er i det første settet, men ikke i det andre settet.
For oss betyr det at vi skal starte med vår engineering sett, og deretter fjerne eventuelle elementer som også er i freelancersettet. Eksempel:
la engineering = ny Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); la freelancers = new Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); la forskjellen = ny sett ([... engineering] .filter (x =>! freelancers.has (x))); console.log (forskjell);
Forskjellen mellom verkstedet og freelancersettet er Set 'Alberta', 'Dr. Gero ',' Bulma '. Hvis vi ønsker å få listen over personer som er frilansere og ikke ingeniører, starter vi med freelancerset og fjerner elementene som vises i ingeniørenes sett. Eksempel:
la forskjellen = ny sett ([freelancers] .filter (x =>! engineering.has (x))); console.log (forskjell);
Dette gir oss et annet resultat. Forskjellen mellom freelancersettet og engineering settet er Set 'Piccolo', 'Vegeta', 'Goku'.
Finn forskjellen på [1, 3, 5, 7, 9] og [2, 3, 4, 6].
Finn forskjellen på [2, 3, 4, 6] og [1, 3, 5, 7, 9].
Nå vil vi gjerne finne hvem i selskapet er en ingeniør eller en frilanser, men ikke begge. Dette er den symmetriske forskjellen. Den symmetriske forskjellen mellom to sett er settet som inneholder elementer fra enten sett, men ikke begge sett.
En tilnærming vi kunne bruke er å finne foreningen til de to settene (alle som er ingeniør, frilanser eller begge) og trekke skjæringspunktet (alle som er både ingeniør og frilanser). Ved å kombinere teknikkene vi brukte tidligere, kan vi få den symmetriske forskjellen med følgende kode:
la engineering = ny Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); la freelancers = new Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); la union = ny Set ([... engineering, ... freelancers]); la krysset = nytt sett ([... engineering] .filter (x => freelancers.has (x))) la symmetriskDifference = nytt sett ([... union] .filter (x =>! intersection.has (x))); console.log (symmetricDifference);
Den symmetriske forskjellen mellom våre tekniske sett og våre frilansere er Set 'Alberta', 'Dr. Gero ',' Bulma ',' Piccolo ',' Vegeta ',' Goku '.
Finn den symmetriske forskjellen på [1, 3, 5, 7, 9] og [2, 3, 4, 6].
Hvis vi har vårt sett med ansatte og et sett med ingeniører, hvordan kan vi finne settet av alle mennesker som ikke er ingeniører? En ting vi kunne gjøre er å trekke ingeniører sett fra de ansatte sett. Dette settet er komplementet til våre ingeniører satt i forhold til våre ansatte sett. Eksempel:
la ansatte = ['Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan ',' Goku ',' Piccolo ',' Vegeta ']; la engineering = ny Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); la komplement = nytt sett ([... ansatte] .filter (x =>! engineering.has (x))); console.log (komplement);
Komplementet til engineering settet i forhold til våre ansatte sett er Set 'Goku', 'Piccolo', 'Vegeta'.
Gitt det universelle settet [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], finn komplementet til sett [2, 4, 6, 8, 10].
Setter kommer til nytte når du må sammenligne forskjellige lister, kombinere lister eller finne unike elementer i en liste. Neste gang du har et problem der du må analysere data på denne måten, bør du vurdere å bruke en av de angitte operasjonene som er nevnt ovenfor. Her er en liste over nøkkelordene som ble diskutert:
Som vanlig, husk om du leter etter flere ressurser for å studere eller bruke i arbeidet ditt, sjekk ut hva vi har tilgjengelig på Envato-markedet.