2015-09-24 4 views
8

Qual è il modo più efficiente per filtrare o mappare un nodelist in ES6?Nodelist di filtri o mappe in ES6

Sulla base delle mie letture, vorrei utilizzare una delle seguenti opzioni:

[...nodelist].filter 

o

Array.from(nodelist).filter 

Quale mi consiglia? E ci sono modi migliori, ad esempio senza coinvolgere gli array?

+2

Fondamentalmente, entrambi i metodi fanno la stessa cosa. Si sta usando 'babel', quindi' [... coll] 'chiamerà semplicemente' Array.from (coll) 'per tutto ciò che non è un 'Array'. –

+0

FWIW, la sintassi '...' potrebbe non essere supportata dagli IDE precedenti mentre 'Array.from()' è solo un metodo normale. –

risposta

14
  • [...nodelist] creerà una matrice di un oggetto se l'oggetto è iterabile.
  • Array.from(nodelist) farà una matrice su un oggetto se l'oggetto è iterabile o se l'oggetto è array simile (ha .length e puntelli numerici)

per i due esempi saranno identici se NodeList.prototype[Symbol.iterator] esiste, perché entrambi i casi coprono i iterabili. Se il tuo ambiente non è stato configurato in modo tale che NodeList sia iterabile, il tuo primo esempio fallirà e il secondo avrà esito positivo. Babel attualmente does not handle this case properly.

Quindi se il tuo NodeList è iterabile, dipende solo da te che usi. Probabilmente sceglierei caso per caso. Uno dei vantaggi di Array.from è che richiede un secondo argomento di una funzione di mappatura, mentre il primo [...iterable].map(item => item) dovrebbe creare un array temporaneo, Array.from(iterable, item => item) no. Tuttavia, se non stai mappando la lista, non importa.

+0

molto utile, grazie per le spiegazioni dettagliate e la sintassi di mappatura. – Christophe