Comprensione degli insiemi con JavaScript

I set possono essere molto potenti se comprendi come usarli. Alcune applicazioni di set includono la soluzione dei problemi di conteggio in cui è possibile trovare il numero di modi in cui è possibile raggruppare gli elementi. 

Un'altra applicazione è problemi che richiedono di trovare relazioni tra gli elementi. La specifica ECMAScript non include i metodi per operare su insiemi in questo modo. Ma è possibile creare il tuo. 

Quello che segue è una panoramica della teoria degli insiemi con applicazioni pratiche che è possibile utilizzare per estendere le funzionalità di JavaScript e risolvere problemi più complessi.

Contenuto

  • Nozioni di base
  • Unione
  • Intersezione
  • Differenza
  • Differenza simmetrica
  • Complemento
  • Revisione

Nozioni di base

Un set è una collezione non ordinata di elementi che sono tutti unici. Ad esempio, l'elenco di tutti gli impiegati del tuo lavoro è un insieme. Ogni dipendente sarebbe un elemento nel set. In realtà, questi elementi verrebbero archiviati utilizzando un numero ID o di previdenza sociale perché questi sono valori che possiamo garantire saranno unici. Nota come l'ordine di questi elementi è irrilevante per noi perché gli ID di ordinamento oi numeri di previdenza sociale non hanno alcun significato.  

Chiamiamo il set di dipendenti il ​​set universale perché contiene tutti gli elementi presi in considerazione. Immaginiamo un altro set. Questo set è l'elenco dei dipendenti della tua azienda che lavorano nel dipartimento di ingegneria. Questo è un sottoinsieme del nostro set di dipendenti perché ogni elemento nel set di ingegneria esiste anche nel set di dipendenti. Un altro sottoinsieme è la lista di impiegati che sono appaltatori freelance. Ecco come creeremo questi set in JavaScript:

let engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); lasciamo freelance = nuovo Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']);

Se vuoi aggiungere un'altra persona a uno dei nostri set, useremo la sintassi set.add (valore) e sostituire impostato con il nome del nostro set e valore con il valore dell'elemento che si sta aggiungendo. Se proviamo ad aggiungere un elemento già presente nel set, non verrà aggiunto. Esempio:

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

Questo stamperà Set 'Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan '.

In questo momento, potresti pensare così cosa? Cosa posso fare con queste informazioni? In seguito vedremo come possiamo operare sui set per aiutarci a risolvere alcuni problemi comuni.

Unione

Cosa succede se vogliamo trovare tutti i dipendenti nella nostra azienda che sono liberi professionisti o che lavorano nel dipartimento di ingegneria? Dovremmo combinare i due set e quindi rimuovere eventuali nomi duplicati. Questo è chiamato l'unione. 

L'unione di due set è l'insieme che contiene elementi di entrambi gli insiemi o di entrambi gli insiemi. Nota come gli elementi nel nostro set di ingegneria sono anche nel set di freelancer. Ecco un modo per trovare l'unione di entrambi i set:

let engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); lasciamo freelance = nuovo Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); let union = new Set ([... engineering, ... freelance]); console.log (unione);

Il ... l'operatore trasforma il nostro set in un array e, dopo aver combinato i due array, il Impostato costruttore rimuove gli elementi duplicati. L'unione dei due set sarà Set 'Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan ',' Piccolo ',' Vegeta ',' Goku '.

Compito

Qual è l'unione degli insiemi [1, 3, 5, 7, 9] e [2, 3, 4, 6]?

Intersezione

Supponiamo di voler trovare tutti i dipendenti che si trovano nel dipartimento di ingegneria e che sono liberi professionisti. Questa è l'intersezione degli insiemi. L'intersezione di due set è il set contenente elementi in entrambi i set. 

Per riprodurre questo, possiamo cercare attraverso un set e controllare se ogni elemento è nell'altro set. Per verificare se un elemento è in un set, usiamo il ha metodo. Esempio:

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

Questo sarebbe tornato vero. Usando il ha metodo, possiamo filtrare il nostro set di ingegneria per gli articoli che sono anche nel set freelance.

let engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); lasciamo freelance = nuovo Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); let intersezione = new Set ([... engineering] .filter (x => freelancers.has (x))); console.log (intersezione);

L'intersezione di ingegneria e liberi professionisti è Set 'Trunks', 'Gohan'.

Compito

Qual è l'intersezione degli insiemi [1, 3, 5, 7, 9] e [2, 3, 4, 6]?

Differenza

Consideriamo lo scenario in cui vogliamo trovare gli ingegneri che non sono liberi professionisti. Questa è la differenza. La differenza di due set è il set contenente elementi che si trovano nel primo set, ma non nel secondo set. 

Per noi, ciò significa che inizieremo con il nostro set di ingegneria, e quindi rimuoveremo tutti gli elementi presenti anche nel set di free-lance. Esempio:

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

La differenza tra il set di ingegneria e il set freelance è Set 'Alberta', 'Dr. Gero ',' Bulma '. Se vogliamo ottenere l'elenco delle persone che sono freelance e non ingegneri, iniziamo con il set di freelance e rimuoviamo gli elementi che appaiono nel set di ingegneri. Esempio:

let difference = new Set ([... freelance]. filtro (x =>! engineering.has (x))); console.log (differenza);

Questo ci dà un risultato diverso. La differenza tra il set di freelance e il set di ingegneria è Set 'Piccolo', 'Vegeta', 'Goku'.

Compito

Trova la differenza di [1, 3, 5, 7, 9] e [2, 3, 4, 6].

Trova la differenza di [2, 3, 4, 6] e [1, 3, 5, 7, 9].

Differenza simmetrica

Ora vorremmo trovare chi nella compagnia è un ingegnere o un libero professionista, ma non entrambi. Questa è la differenza simmetrica. La differenza simmetrica di due set è il set contenente gli elementi di entrambi gli insiemi, ma non di entrambi gli insiemi. 

Un approccio che potremmo usare è trovare l'unione dei due set (chiunque sia un ingegnere, un libero professionista o entrambi) e sottrarre l'intersezione (chiunque sia sia un ingegnere che un libero professionista). Combinando le tecniche che abbiamo usato in precedenza, possiamo ottenere la differenza simmetrica con il seguente codice:

let engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); lasciamo freelance = nuovo Set (['Piccolo', 'Trunks', 'Vegeta', 'Goku', 'Gohan']); let union = new Set ([... engineering, ... freelance]); let intersection = new Set ([... engineering] .filter (x => freelancers.has (x))) let symmetricDifference = new Set ([... union] .filter (x =>! intersezione.has (x))); console.log (differenza simmetrica);

La differenza simmetrica del nostro set di ingegneria e dei nostri freelance è Set 'Alberta', 'Dr. Gero ',' Bulma ',' Piccolo ',' Vegeta ',' Goku '.

Compito

Trova la differenza simmetrica di [1, 3, 5, 7, 9] e [2, 3, 4, 6].

Complemento

Se abbiamo il nostro gruppo di dipendenti e un gruppo di ingegneri, come possiamo trovare il set di tutte le persone che non sono ingegneri? Una cosa che potremmo fare è sottrarre gli ingegneri impostati dal set di dipendenti. Questo set è il complemento dei nostri ingegneri impostato in relazione al set dei nostri dipendenti. Esempio:

let employees = ['Alberta', 'Dr. Gero ',' Trunks ',' Bulma ',' Gohan ',' Goku ',' Piccolo ',' Vegeta ']; let engineering = new Set (['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']); let complementary = new Set ([... employee] .filter (x =>! engineering.has (x))); console.log (complemento);

Il complemento del set di ingegneria in relazione al set dei dipendenti è Set 'Goku', 'Piccolo', 'Vegeta'.

Compito

Dato l'insieme universale [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], trova il complemento per impostare [2, 4, 6, 8, 10].

Revisione

I set sono utili quando è necessario confrontare diversi elenchi, combinare elenchi o trovare elementi unici in un elenco. La prossima volta che si verifica un problema in cui è necessario analizzare i dati in questo modo, considerare l'utilizzo di una delle operazioni di set menzionate sopra. Ecco un elenco dei termini chiave discussi:

  • Set: una raccolta di elementi unici e non ordinati.
  • Set universale: tutti i possibili elementi di un set.
  • Sottoinsieme: un set più piccolo all'interno di un set.
  • Unione dei set A e B: set che contiene elementi in A, B o entrambi.
  • Intersezione degli insiemi A e B: il set contenente elementi sia di A che di B.
  • Differenza degli insiemi A e B: il set contenente elementi in A ma non in B.
  • Differenza simmetrica degli insiemi A e B: il set contenente elementi in A o B, ma non entrambi.
  • Complemento dell'insieme A: Gli elementi dell'insieme universale che non sono in A.

Come al solito, ricorda che se stai cercando altre risorse da studiare o da utilizzare nel tuo lavoro, dai un'occhiata a ciò che abbiamo a disposizione nel mercato Envato.