14/12/2005
En el mundo del desarrollo con JavaScript, a menudo nos encontramos con estructuras de datos que se parecen a los arrays, pero que no lo son. Estos objetos, conocidos como "array-like" o iterables, carecen de los métodos útiles que amamos de los arrays, como map(), filter() o reduce(). Antes de ES6, convertirlos en un array real requería trucos como Array.prototype.slice.call(). Afortunadamente, JavaScript moderno nos ofrece una solución mucho más limpia, potente y legible: el método estático Array.from(). Este método no solo simplifica la conversión, sino que también añade funcionalidades extra que lo convierten en una herramienta indispensable en el arsenal de cualquier desarrollador.

¿Qué es Exactamente Array.from()?
Array.from() es un método estático del objeto Array introducido en ECMAScript 2015 (ES6). Su propósito principal es crear una nueva instancia de Array, copiada superficialmente (shallow-copied), a partir de dos tipos de fuentes:
- Objetos iterables: Son objetos que implementan el protocolo de iteración, como
String,Set,Map, o los resultados de funciones generadoras. - Objetos array-like (similares a un array): Son objetos que tienen una propiedad
lengthy elementos indexados numéricamente (por ejemplo,{0: 'a', 1: 'b', length: 2}). El ejemplo más común es el objetoargumentsdisponible dentro de las funciones tradicionales o unaNodeListdevuelta pordocument.querySelectorAll().
Al ser un método estático, siempre se llama directamente sobre el constructor Array (Array.from(...)), y no sobre una instancia de un array (miArray.from(...), lo cual devolvería undefined).
Sintaxis Desglosada
La sintaxis completa del método es increíblemente flexible y esconde un gran poder en sus parámetros opcionales.

Array.from(target[, mapFn[, thisArg]])Analicemos cada uno de sus componentes:
| Parámetro | Descripción | Obligatorio |
|---|---|---|
target | El objeto iterable o array-like que se desea convertir en un nuevo array. | Sí |
mapFn | Una función opcional que se ejecutará sobre cada elemento del nuevo array. Es similar a llamar al método .map() justo después de la creación, pero es más eficiente ya que no crea un array intermedio. La función recibe dos argumentos: (elemento, indice). | No |
thisArg | Un valor opcional que se utilizará como this al ejecutar la función mapFn. Útil cuando la función de mapeo es un método de un objeto. | No |
Ejemplos Prácticos: Array.from() en Acción
La mejor manera de entender Array.from() es viéndolo funcionar. A continuación, exploraremos varios casos de uso comunes que demuestran su versatilidad.
1. Crear un Array a partir de un String
Un string en JavaScript es un objeto iterable. Array.from() puede descomponerlo fácilmente en un array de sus caracteres individuales.

const nombre = "JavaScript"; const letras = Array.from(nombre); console.log(letras); // Salida: ['J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']2. Convertir un Set en un Array
Los objetos Set almacenan valores únicos. Esta es una forma fantástica de eliminar elementos duplicados de un array y luego convertir el resultado de nuevo a un array.
const numerosRepetidos = [1, 2, 3, 2, 4, 5, 1, 5]; const setUnico = new Set(numerosRepetidos); const numerosUnicos = Array.from(setUnico); console.log(numerosUnicos); // Salida: [1, 2, 3, 4, 5]3. Convertir un Map en un Array
Un objeto Map almacena pares clave-valor. Al usar Array.from(), se convierte en un array de arrays, donde cada subarray contiene el par [clave, valor].

const mapa = new Map([ ['producto', 'Laptop'], ['precio', 1200] ]); const arrayDesdeMapa = Array.from(mapa); console.log(arrayDesdeMapa); // Salida: [ ['producto', 'Laptop'], ['precio', 1200] ]4. Transformar una NodeList del DOM
Este es uno de los casos de uso más prácticos. Cuando seleccionas múltiples elementos del DOM con document.querySelectorAll(), obtienes una NodeList, que es un objeto array-like. No tiene métodos como forEach en todos los navegadores (especialmente los más antiguos) ni map o filter. Array.from() lo soluciona elegantemente.
<!-- HTML de ejemplo --> <ul> <li>Elemento 1</li> <li>Elemento 2</li> <li>Elemento 3</li> </ul> <script> const itemsNodeList = document.querySelectorAll('li'); // itemsNodeList no es un array real. const itemsArray = Array.from(itemsNodeList); // Ahora podemos usar métodos de array, como map: const textos = itemsArray.map(item => item.textContent); console.log(textos); // Salida: ['Elemento 1', 'Elemento 2', 'Elemento 3'] </script>5. Utilizando la Función de Mapeo (mapFn)
El segundo argumento, mapFn, nos permite transformar los datos mientras se crea el array. Esto es más eficiente que crear el array y luego llamar a .map(), ya que evita la creación de un array intermedio.

Imaginemos que queremos crear un array a partir de otro, pero duplicando cada valor:
const numeros = [1, 2, 3, 4, 5]; // En lugar de: const duplicados = Array.from(numeros).map(x => x * 2); // Podemos hacerlo en un solo paso: const duplicados = Array.from(numeros, x => x * 2); console.log(duplicados); // Salida: [2, 4, 6, 8, 10]6. Especificando el Contexto con `thisArg`
El tercer parámetro, thisArg, es útil cuando nuestra función de mapeo es un método que pertenece a un objeto y necesita acceder a otras propiedades de ese objeto a través de this.
const multiplicador = { factor: 5, multiplicar(n) { return n * this.factor; } }; const valores = [10, 20, 30]; const resultados = Array.from(valores, multiplicador.multiplicar, multiplicador); console.log(resultados); // Salida: [50, 100, 150]Un Caso de Uso Avanzado: Creando Secuencias de Números
Una de las aplicaciones más ingeniosas de Array.from() es la generación de secuencias de números o rangos, una tarea que no tiene una función nativa en JavaScript. Podemos lograrlo combinando un objeto array-like con una función de mapeo.

Para crear un array con números del 0 al 4:
const secuencia = Array.from({ length: 5 }, (valor, indice) => indice); console.log(secuencia); // Salida: [0, 1, 2, 3, 4]Aquí, { length: 5 } es un objeto array-like. Array.from crea un array de 5 elementos (inicialmente undefined). Luego, nuestra función de mapeo ignora el valor (_ o valor) y simplemente devuelve el índice de cada elemento.
Podemos llevar esto más lejos y crear una función reutilizable para generar rangos complejos:
const crearRango = (inicio, fin, paso = 1) => { const longitud = Math.floor((fin - inicio) / paso) + 1; return Array.from({ length: longitud }, (_, i) => inicio + i * paso); }; const rangoSimple = crearRango(1, 5); console.log(rangoSimple); // Salida: [1, 2, 3, 4, 5] const rangoPares = crearRango(2, 10, 2); console.log(rangoPares); // Salida: [2, 4, 6, 8, 10]Preguntas Frecuentes (FAQ)
- ¿`Array.from()` modifica el objeto original?
- No.
Array.from()es un método inmutable. Siempre devuelve una nueva instancia de array (una copia superficial) y nunca modifica el objeto de origen. - ¿Cuál es la diferencia con el operador de propagación (`...`)?
- El operador de propagación (
[...iterable]) es una excelente alternativa para convertir iterables en arrays. Sin embargo, tiene dos diferencias clave: 1) No funciona con objetos que son solo array-like pero no iterables (como un objeto con solo propiedadlength). 2) No tiene una funcionalidad de mapeo incorporada; necesitarías encadenar una llamada a.map()después. - ¿Qué sucede si un objeto array-like tiene huecos?
Array.from()nunca crea arrays dispersos (sparse arrays). Si un índice falta en el objeto de origen, su valor en el nuevo array seráundefined. Por ejemplo,Array.from({0: 'a', 2: 'c', length: 3})resultará en['a', undefined, 'c'].- ¿Necesito un polyfill para usar `Array.from()`?
- Es compatible con todos los navegadores modernos (Chrome 45+, Firefox 38+, Edge 12+, Safari 9+). Si necesitas dar soporte a navegadores muy antiguos como Internet Explorer, deberás incluir un polyfill para proporcionar esta funcionalidad.
Conclusión
Array.from() es mucho más que un simple conversor. Es una navaja suiza para la creación y transformación de arrays en JavaScript. Su capacidad para manejar tanto iterables como objetos array-like, combinada con su potente función de mapeo integrada, lo convierte en una solución limpia, legible y eficiente para una multitud de problemas cotidianos. La próxima vez que necesites convertir algo en un array, recuerda el poder y la flexibilidad que Array.from() pone a tu disposición.
Si quieres conocer otros artículos parecidos a Array.from(): La Guía Definitiva en JavaScript puedes visitar la categoría Juegos.
