Wszystko, co wiesz, arguments
to specjalny obiekt, który przechowuje wszystkie argumenty przekazane do funkcji.
Dopóki nie jest to tablica - nie możesz użyć czegoś takiego jak arguments.slice(1)
.
A więc pytanie - jak pokroić wszystko oprócz pierwszego elementu arguments
?
UPD :
wydaje się, że nie ma sposobu bez konwersji go na tablicę z
var args = Array.prototype.slice.call(arguments);
Jeśli ktoś wrzuci inne rozwiązanie, byłoby super, jeśli nie - sprawdzę pierwsze z linijką powyżej jako odpowiedź.
javascript
zerkms
źródło
źródło
arguments
i przekonwertowanie go na tablicę itp. Zobacz moją odpowiedź poniżej.Odpowiedzi:
Wtrącanie się w funkcje tablicowe nie jest w rzeczywistości konieczne.
Używanie składni parametrów rest
...rest
jest czystsze i wygodniejsze.Przykład
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");
...Odpoczynek
źródło
P. Jak pokroić wszystko oprócz pierwszego elementu
arguments
?Poniższe zwróci tablicę zawierającą wszystkie argumenty oprócz pierwszego:
var slicedArgs = Array.prototype.slice.call(arguments, 1);
Nie musisz
arguments
najpierw konwertować na tablicę, zrób to wszystko w jednym kroku.źródło
.slice()
w programiearguments
, ale jedynym podanym powodem jest to, że uniemożliwia to optymalizację funkcji przez silnik JS. Więc nie chodzi o to, że zawodzi, po prostu może działać wolniej. Nie mam zamiaru pisać kodu do optymalizacji w silniku JS dnia, a nie wtedy, gdy silnik jutra mógł rozwiązać problem optymalizacji, aw każdym razie różnica prawdopodobnie nie będzie zauważalna dla użytkownika w większości przypadkach. Lepiej jest najpierw napisać jasny i łatwy w utrzymaniu kod, a następnie wrócić i zoptymalizować tylko wtedy, gdy pojawi się wymierny problem z wydajnością.Możesz „kroić bez cięcia”, proceduralnie przechodząc przez obiekt arguments:
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]
źródło
.slice()
;-)Array.prototype.slice
, ale Twoje pytanie dotyczyło innego sposobu.for
:-P)Z https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments :
Zatem powyższa odpowiedź Paula Rosiany jest poprawna
źródło
Może to być sposób:
var args = Array.from(arguments).slice(1);
źródło
function foo(...args)
Możesz użyć metody
[].slice.call(arguments, 1)
[] .slice zwróci obiekt funkcji plasterka i możesz go wywołać jako parametry
arguments
i1
sąźródło
Możesz użyć ... rest w funkcji, aby oddzielić pierwszy i resztę argumentów:
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)
źródło