El arguments
object es un objeto similar a una matriz accesible dentro de todas las funciones que no son flechas que representa los valores de los argumentos pasados a esa función. Puede usar índices numéricos para acceder a los valores de los argumentos del arguments
objeto. Por ejemplo, se puede acceder al primer argumento como arguments[0]
, se puede acceder al segundo argumento como arguments[1]
, y así sucesivamente.
Puedes ver el arguments
El objeto se parece mucho a una matriz, pero no es una matriz real. Aunque tiene el length
propiedad, no puede usar los métodos de matriz comunes como map()
, slice()
y filter()
en él.
Para convertir un arguments
objetar a un verdadero Array
objeto, hay varias formas disponibles que vamos a discutir a continuación.
Parámetros de descanso
La sintaxis del parámetro rest se introdujo en ES6 y nos permite representar un número no especificado de argumentos como una matriz. Para usar parámetros de descanso, puede prefijar el último parámetro de la función con ...
(operador de propagación). Convertirá todos los argumentos proporcionados por el usuario restantes en una matriz de JavaScript estándar.
Dado que el parámetro resto es un Array
real instancia, a diferencia del arguments
objeto, no necesita realizar ninguna conversión:
const sort = (...numbers) => {
return numbers.sort((a, b) => a - b);
};
sort(1, 4, 5, 2);
// [ 1, 2, 4, 5 ]
Array.from()
Otra forma de convertir el arguments
objeto a una matriz en ES6 es mediante el método Array.from(). Este método convierte un objeto similar a una matriz o iterable en un Array
instancia:
function sort() {
return Array.from(arguments).sort((a, b) => a - b);
}
sort(1, 4, 5, 2);
// [ 1, 2, 4, 5 ]
Array.prototype.slice()
Finalmente, el último método para convertir un arguments
objeto a una matriz es mediante el Array.prototype.slice()
método. Al igual que convertir una lista de nodos en una matriz, Array
de slice()
el método toma el arguments
objeto y lo transforma en una verdadera matriz:
function sort() {
const args = Array.prototype.slice.call(arguments);
return args.sort((a, b) => a - b);
}
const sorted = sort(1, 4, 5, 2);
console.log(sorted);
// [ 1, 2, 4, 5 ]
También puede usar una forma concisa del slice()
método:
const args = [].slice.call(arguments);
El Array.prototype.slice.call()
funciona en todos los navegadores modernos y antiguos, incluido IE 6+. Debe utilizar este enfoque si desea admitir navegadores antiguos.
Para obtener más información sobre las matrices de JavaScript y cómo usarlas para almacenar múltiples piezas de información en una sola variable, consulte esta guía.