javascript - two - Filtro o mapa de las listas de distribución en ES6.
map filter reduce (3)
Encontré una reference que usa el map
directamente en NodeList por
Array.prototype.map.call(nodelist, fn)
No lo he probado, pero parece plausible que esto sea más rápido porque debería acceder a NodeList directamente.
¿Cuál es la forma más eficiente de filtrar o asignar una lista de nodos en ES6?
Basado en mis lecturas, usaría una de las siguientes opciones:
[...nodelist].filter
o
Array.from(nodelist).filter
¿Cuál recomendarías? ¿Y hay mejores formas, por ejemplo, sin involucrar matrices?
TL; DR;
Array.prototype.slice.call(nodelist).filter
El método slice () devuelve una matriz. Esa matriz devuelta es una copia superficial de la colección (NodeList). Así que funciona más rápido que ** Array.from () **
Los elementos de la colección original se copian en la matriz devuelta de la siguiente manera:
- Para las referencias de objetos (y no el objeto real), el sector copia las referencias de objetos en la nueva matriz. Tanto la matriz original como la nueva se refieren al mismo objeto. Si un objeto referenciado cambia, los cambios son visibles tanto para las matrices nuevas como para las originales.
- Para cadenas, números y valores booleanos (no cadenas, números y objetos booleanos), la división copia los valores en la nueva matriz. Los cambios en la cadena, número o booleano en una matriz no afectan a la otra matriz.
Breve explicación sobre los argumentos.
Array.prototype.slice (beginIndex, endIndex)
- toma opcional args beginIndex y endIndex. Si no se les proporcionan, los segmentos utilizan beginIndex == 0, por lo tanto, extrae todos los elementos de la colección.
Array.prototype.slice.call (espacio de nombres, beginIndex, endIndex)
- Toma un objeto como primer argumento. Si usamos una colección como un objeto, literalmente significa que llamamos al método de división directamente desde ese objeto namespace.slice ()
-
[...nodelist]
creará una matriz de fuera de un objeto si el objeto es iterable. -
Array.from(nodelist)
creará una matriz a partir de un objeto si el objeto es iterable o si es similar a una matriz (tiene.length
y numéricas)
Sus dos ejemplos serán idénticos si NodeList.prototype[Symbol.iterator]
, porque ambos casos cubren iterables. Si su entorno no se ha configurado de modo tal que NodeList
sea iterable, su primer ejemplo fallará y el segundo tendrá éxito. Babel
actualmente no maneja este caso correctamente .
Entonces, si su NodeList
es iterable, realmente depende de usted lo que use. Probablemente elegiría caso por caso. Un beneficio de Array.from
es que toma un segundo argumento de una función de mapeo, mientras que el primer [...iterable].map(item => item)
tendría que crear una matriz temporal, Array.from(iterable, item => item)
no lo haría. Sin embargo, si no está mapeando la lista, no importa.