OSSERVAZIONI :
- Le operazioni di set possono essere interpretate come istantanee all'interno del flusso di esecuzione.
- Non siamo prima di un sostituto definitivo.
- Gli elementi di una classe Set non hanno indici accessibili.
- Set class è un complemento di classe Array , utile in quegli scenari in cui è necessario memorizzare una raccolta su cui applicare operazioni di base di addizione, eliminazione, controllo e iterazione.
Condivido alcuni test di performance. Prova ad aprire la tua console e copia e incolla il codice qui sotto.
Creazione di un array (125000)
var n = 125000;
var arr = Array.apply( null, Array( n ) ).map( ( x, i ) => i );
console.info( arr.length );
1. Individuazione di un indice
Abbiamo confrontato il metodo has di Set con Array indexOf:
Array / indexOf (0.281ms) | Imposta / ha (0,053 ms)
var checkArr = ( arr, item ) => arr.indexOf( item ) !== -1;
var checkSet = ( set, item ) => set.has( item );
var set, result;
console.time( 'timeTest' );
result = checkArr( arr, 123123 );
console.timeEnd( 'timeTest' );
set = new Set( arr );
console.time( 'timeTest' );
checkSet( set, 123123 );
console.timeEnd( 'timeTest' );
2. Aggiunta di un nuovo elemento
Confrontiamo rispettivamente i metodi add e push degli oggetti Set e Array:
Array / push (1.612 ms) | Imposta / aggiungi (0,006 ms)
console.time( 'timeTest' );
arr.push( n + 1 );
console.timeEnd( 'timeTest' );
set = new Set( arr );
console.time( 'timeTest' );
set.add( n + 1 );
console.timeEnd( 'timeTest' );
console.info( arr.length );
console.info( set.size );
3. Eliminazione di un elemento
Quando si eliminano elementi, dobbiamo tenere presente che Array e Set non si avviano in condizioni uguali. Array non ha un metodo nativo, quindi è necessaria una funzione esterna.
Array / deleteFromArr (0,356 ms) | Imposta / rimuovi (0,019 ms)
var deleteFromArr = ( arr, item ) => {
var i = arr.indexOf( item );
i !== -1 && arr.splice( i, 1 );
};
console.time( 'timeTest' );
deleteFromArr( arr, 123123 );
console.timeEnd( 'timeTest' );
set = new Set( arr );
console.time( 'timeTest' );
set.delete( 123123 );
console.timeEnd( 'timeTest' );
Leggi l'articolo completo qui