Alles, was Sie wissen, arguments
ist ein spezielles Objekt, das alle an die Funktion übergebenen Argumente enthält.
Und solange es sich nicht um ein Array handelt, können Sie so etwas nicht verwenden arguments.slice(1)
.
Also die Frage - wie schneidet man alles außer dem ersten Element ab arguments
?
UPD :
Es scheint, als gäbe es keinen Weg, ohne es in ein Array mit zu konvertieren
var args = Array.prototype.slice.call(arguments);
Wenn jemand eine andere Lösung veröffentlicht, wäre es großartig, wenn nicht - ich werde die erste mit der obigen Zeile als Antwort überprüfen.
javascript
zerkms
quelle
quelle
arguments
und in ein Array usw. umzuwandeln. Bitte siehe meine Antwort unten.Antworten:
Das Einmischen in Array-Funktionen ist eigentlich nicht notwendig.
Die Verwendung der Restparametersyntax
...rest
ist sauberer und bequemer.Beispiel
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");
...Sich ausruhen
quelle
Frage: Wie schneide ich alles außer dem ersten Element ab
arguments
?Im Folgenden wird ein Array zurückgegeben, das alle Argumente außer dem ersten enthält:
var slicedArgs = Array.prototype.slice.call(arguments, 1);
Sie müssen nicht
arguments
zuerst in ein Array konvertieren , sondern alles in einem Schritt erledigen.quelle
.slice()
aufarguments
, aber der einzige Grund ist , da es JS - Engine Optimierung der Funktion verhindert. Es ist also nicht so, dass es fehlschlägt, es könnte nur langsamer sein. Ich werde keinen Code schreiben, um die Optimierung in der JS-Engine des Tages zu berücksichtigen, nicht, wenn die Engine von morgen das Optimierungsproblem gelöst haben könnte, und auf jeden Fall wird der Unterschied für den Benutzer wahrscheinlich in den meisten Fällen nicht wahrnehmbar sein Fälle. Es ist besser, zuerst klaren und einfach zu wartenden Code zu schreiben und dann nur dann zurückzukehren und zu optimieren, wenn ein messbares Leistungsproblem auftritt.Sie können "schneiden, ohne zu schneiden", indem Sie das Argumentobjekt prozedural durchlaufen:
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]
quelle
.slice()
;-)Array.prototype.slice
, aber Ihre Frage war, ob es einen anderen Weg gibt.for
:-P)Von https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments :
Die obige Antwort von Paul Rosiana ist also richtig
quelle
Dies kann ein Weg sein:
var args = Array.from(arguments).slice(1);
quelle
function foo(...args)
Sie können die Methode verwenden
[].slice.call(arguments, 1)
[] .slice gibt Ihnen das Slice-Funktionsobjekt zurück und Sie können es als
arguments
und1
die Parameter aufrufenquelle
Sie können ... rest innerhalb der Funktion verwenden, um das erste und den Rest der Argumente zu trennen:
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)
quelle