La forma más eficiente de convertir una colección HTML en una matriz

Resuelto Tom asked hace 16 años • 10 respuestas

¿Existe una forma más eficiente de convertir una colección HTML en una matriz, además de recorrer en iteración el contenido de dicha colección e insertar manualmente cada elemento en una matriz?

Tom avatar Oct 22 '08 01:10 Tom
Aceptado
var arr = Array.prototype.slice.call( htmlCollection )

tendrá el mismo efecto usando código "nativo".

Editar

Dado que esto recibe muchas vistas, tenga en cuenta (según el comentario de @oriol) que la siguiente expresión más concisa es efectivamente equivalente:

var arr = [].slice.call(htmlCollection);

Pero tenga en cuenta, según el comentario de @JussiR, que a diferencia de la forma "detallada", crea una instancia de matriz vacía, no utilizada y, de hecho, inutilizable en el proceso. Lo que hacen los compiladores al respecto está fuera del alcance del programador.

Editar

Desde ECMAScript 2015 (ES 6) también existe Array.from :

var arr = Array.from(htmlCollection);

Editar

ECMAScript 2015 también proporciona el operador de extensión , que es funcionalmente equivalente a Array.from(aunque tenga en cuenta que Array.fromadmite una función de mapeo como segundo argumento).

var arr = [...htmlCollection];

He confirmado que los dos anteriores funcionan en NodeList.

Una comparación de rendimiento de los métodos mencionados: http://jsben.ch/h2IFA

harpo avatar Oct 21 '2008 18:10 harpo

No estoy seguro si esto es lo más eficiente, pero una sintaxis ES6 concisa podría ser:

let arry = [...htmlCollection] 

Editar: Otro, del comentario de Chris_F:

let arry = Array.from(htmlCollection)
mido avatar May 05 '2016 04:05 mido