Todo lo que sabes arguments
es un objeto especial que contiene todos los argumentos pasados a la función.
Y siempre que no sea una matriz, no puede usar algo como arguments.slice(1)
.
Entonces la pregunta: cómo cortar todo menos el primer elemento de arguments
?
UPD :
parece que no hay forma sin convertirlo en una matriz con
var args = Array.prototype.slice.call(arguments);
Si alguien publica otra solución, sería genial, si no, verificaré la primera con la línea anterior como respuesta.
javascript
zerkms
fuente
fuente
arguments
y convertirlo en una matriz, etc. Por favor, vea mi respuesta a continuación.Respuestas:
En realidad, no es necesario entrometerse con las funciones de matriz.
El uso de la sintaxis del parámetro rest
...rest
es más limpio y conveniente.Ejemplo
function argumentTest(first, ...rest) { console.log("First arg:" + first); // loop through the rest of the parameters for (let arg of rest) { console.log("- " + arg); } } // call your function with any number of arguments argumentTest("first arg", "#2", "more arguments", "this is not an argument but a contradiction");
...Descanso
fuente
P. ¿Cómo cortar todo menos el primer elemento
arguments
?Lo siguiente devolverá una matriz que contiene todos los argumentos excepto el primero:
var slicedArgs = Array.prototype.slice.call(arguments, 1);
No tiene que convertir
arguments
primero a una matriz, hágalo todo en un solo paso.fuente
.slice()
enarguments
, pero la única razón que se da es que impide la optimización de motores JS de la función. Así que no es que falle, puede que sea más lento. No voy a escribir código para atender la optimización en el motor JS del día, no cuando el motor del mañana podría haber resuelto el problema de optimización y, en cualquier caso, la diferencia probablemente no será perceptible para el usuario en la mayoría de los casos. casos. Es mejor escribir primero un código claro y fácil de mantener, luego volver y optimizar solo si surge un problema de rendimiento medible.Puede "cortar sin cortar" recorriendo procedimentalmente el objeto de argumentos:
function fun() { var args = []; for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); } return args; } fun(1, 2, 3, 4, 5); //=> [2, 3, 4, 5]
fuente
.slice()
;-)Array.prototype.slice
, pero tu pregunta era si había otra forma.for
De https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments :
Entonces la respuesta de Paul Rosiana arriba es correcta
fuente
Esta puede ser una forma:
var args = Array.from(arguments).slice(1);
fuente
function foo(...args)
Puedes usar el método
[].slice.call(arguments, 1)
[] .slice le devolverá el objeto de la función de corte y puede llamarlo como
arguments
y1
son los parámetrosfuente
Puede usar ... rest dentro de la función para separar el primero y el resto de los argumentos:
function foo(arr) { const [first, ...rest] = arguments; console.log(`first = ${first}`); console.log(`rest = ${rest}`); } //Then calling the function with 3 arguments: foo(1,2,3)
fuente