Cómo convertir objetos de argumentos en una matriz en JavaScript

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.