La forma más eficiente de convertir una colección HTML en una matriz
¿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?
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.from
admite 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
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)