Ich möchte eine Funktion mit einem Array als Parameter aufrufen:
const x = ['p0', 'p1', 'p2'];
call_me(x[0], x[1], x[2]); // I don't like it
function call_me (param0, param1, param2 ) {
// ...
}
Gibt es eine bessere Möglichkeit, den Inhalt von x
in call_me()
weiterzugeben?
javascript
arrays
function
call
Robert
quelle
quelle
Warum übergeben Sie nicht das gesamte Array und verarbeiten es nach Bedarf innerhalb der Funktion?
quelle
call_me
Funktion. Am Ende fehlt nur ein Semikolon.Angenommen, call_me ist eine globale Funktion, so erwarten Sie nicht, dass dies festgelegt wird.
quelle
Im ES6-Standard gibt es einen neuen Spread-Operator,
...
der genau das tut.Es wird von allen gängigen Browsern außer IE unterstützt.
Der Spread-Operator kann viele andere nützliche Dinge tun, und die verknüpfte Dokumentation zeigt dies wirklich gut.
quelle
Da hatte @KaptajnKold geantwortet
Außerdem müssen Sie nicht alle Parameter für die Funktion call_me definieren. Sie können einfach verwenden
arguments
quelle
Beachten Sie dies
// ---------------------------
HTML-Seite
kann die Funktion mit beliebigen Args aufrufen
oder
quelle
Funktionsargumente können auch Arrays sein:
Natürlich kann man auch Spread verwenden :
quelle
Bei Verwendung des Spread-Operators müssen wir beachten, dass dies der letzte oder einzige übergebene Parameter sein muss. Sonst wird es scheitern.
Wenn Sie ein Array als Startargument übergeben müssen, können Sie Folgendes tun:
quelle
Sie können den Spread-Operator in einer grundlegenderen Form verwenden
im Fall von Funktionen, die Arrays zurückgeben, von denen jedoch erwartet wird, dass sie als Argumente übergeben werden
Beispiel:
quelle
Die Antwort wurde bereits gegeben, aber ich möchte nur mein Stück Kuchen geben. Was Sie erreichen möchten, wird
method borrowing
im Kontext von JS aufgerufen, dh wenn wir eine Methode aus einem Objekt nehmen und sie im Kontext eines anderen Objekts aufrufen. Es ist durchaus üblich, Array-Methoden zu verwenden und sie auf Argumente anzuwenden. Lassen Sie mich Ihnen ein Beispiel geben.Wir haben also eine "super" -Hashing-Funktion, die zwei Zahlen als Argument verwendet und eine "super sichere" Hash-Zeichenfolge zurückgibt:
So weit so gut, aber wir haben wenig Probleme mit dem obigen Ansatz, es ist eingeschränkt, funktioniert nur mit zwei Zahlen, das ist nicht dynamisch, lassen Sie es mit einer beliebigen Zahl funktionieren und außerdem müssen Sie kein Array übergeben (Sie können wenn Sie immer noch darauf bestehen). Ok, genug geredet, lass uns kämpfen!
Die natürliche Lösung wäre die Verwendung der folgenden
arr.join
Methode:Oh Mann. Das wird leider nicht funktionieren. Da wir Hash (Argumente) und Argumente aufrufen, ist das Objekt sowohl iterierbar als auch Array-ähnlich, aber kein echtes Array. Wie wäre es mit dem folgenden Ansatz?
Der Trick heißt
method borrowing.
Wir leihen eine
join
Methode aus einem regulären Array aus[].join.
und verwenden sie[].join.call
, um sie im Kontext von auszuführenarguments
.Warum funktioniert es?
Das liegt daran, dass der interne Algorithmus der nativen Methode
arr.join(glue)
sehr einfach ist.Entnommen aus der Spezifikation fast "wie sie ist":
Technisch gesehen nimmt es dies und verbindet dieses [0], dieses [1] ... usw. miteinander. Es ist absichtlich so geschrieben, dass es jedes Array-ähnliche zulässt (kein Zufall, viele Methoden folgen dieser Praxis). Deshalb funktioniert es auch mit
this=arguments.
quelle