[ Web Proxy ]
URL:
Viewing: https://it.javascript.info/task/array-unique [Back]  [Original]

Filtrare un array per ottenere elementi unici
IT

Vorremo rendere disponibile questo progetto open-source per persone in tutto il mondo.

Aiutaci a tradurre il contenuto di questo tutorial nella tua lingua!

    Cerca in Javascript.info:
    Cerca nel tutorial:
    Light themeDark theme
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek
    torna alle lezioni

    Filtrare un array per ottenere elementi unici

    importanza: 4

    Abbiamo un array arr.

    Create una funzione unique(arr) che ritorni un array con elementi unici.

    Ad esempio:

    function unique(arr) {
      /* your code */
    }
    
    let strings = ["Hare", "Krishna", "Hare", "Krishna",
      "Krishna", "Krishna", "Hare", "Hare", ":-O"
    ];
    
    alert( unique(strings) ); // Hare, Krishna, :-O

    Apri una sandbox con i test.

    soluzione

    Attraversiamo gli elementi dellarray:

    • Per ogni elemento controlliamo se larray risultante gi lo contiene.
    • Se lo troviamo, passiamo al prossimo, altrimenti lo aggiungiamo.
    function unique(arr) {
      let result = [];
    
      for (let str of arr) {
        if (!result.includes(str)) {
          result.push(str);
        }
      }
    
      return result;
    }
    
    let strings = ["Hare", "Krishna", "Hare", "Krishna",
      "Krishna", "Krishna", "Hare", "Hare", ":-O"
    ];
    
    alert( unique(strings) ); // Hare, Krishna, :-O

    Il codice funziona, ma c un potenziale problema di performace.

    Il metodo result.includes(str) internamente attraversa larray result e confronta ogni elemento con str per trovare una corrispondenza.

    Quindi se ci sono 100 elementi in result e nessuna corrispondenza con str, attraverseremo lintero array result eseguendo essattamente 100 confronti. Se larray result grande, ad esempio 10000, ci sarebbero 10000 di confronti.

    Non propriamente un problema, perch il motore JavaScript molto rapido, quindi un array grande 10000 questione di pochi microsecondi.

    Ma dovremo eseguire questo test per ogni elemento di arr nel ciclo for.

    Quindi se arr.length 10000 avremmo qualcosa come 10000*10000 = 100 milioni di confronti. Sono molti.

    Quindi la soluzione funziona bene solo con array di piccola taglia.

    Pi avanti nel capitolo Map e Set vedremo come ottimizare questo metodo.

    Apri la soluzione con i test in una sandbox.


    Web Proxy Viewer  |  New URL  |  Original Page