373 Stimmen

Übergabe eines Arrays als Funktionsparameter in JavaScript

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 en call_me() ?

506voto

KaptajnKold Punkte 10168
const args = ['p0', 'p1', 'p2'];
call_me.apply(this, args);

Siehe MDN-Dokumente für Function.prototype.apply() .


Wenn die Umgebung ECMAScript 6 unterstützt, können Sie eine Verbreitungsargument stattdessen:

call_me(...args);

147voto

Karl Johan Punkte 3832

Warum übergeben Sie nicht das gesamte Array und verarbeiten es nach Bedarf innerhalb der Funktion?

var x = [ 'p0', 'p1', 'p2' ]; 
call_me(x);

function call_me(params) {
  for (i=0; i<params.length; i++) {
    alert(params[i])
  }
}

70voto

BoltKey Punkte 1763

Im ES6-Standard gibt es eine neue Spread-Operator ... die genau das tut.

call_me(...x)

Sie wird von allen gängigen Browsern außer dem IE unterstützt.

Der Spread-Operator kann viele andere nützliche Dinge tun, und die verlinkte Dokumentation zeigt das sehr gut.

47voto

plexer Punkte 4382

Angenommen, call_me ist eine globale Funktion, so dass Sie nicht erwarten, dass dies gesetzt ist.

var x = ['p0', 'p1', 'p2'];
call_me.apply(null, x);

9voto

徐竟峰 Punkte 137

Wie @KaptajnKold geantwortet hatte

var x = [ 'p0', 'p1', 'p2' ];
call_me.apply(this, x);

Und Sie müssen auch nicht alle Parameter für die call_me-Funktion definieren. Sie können einfach verwenden arguments

function call_me () {
    // arguments is a array consisting of params.
    // arguments[0] == 'p0',
    // arguments[1] == 'p1',
    // arguments[2] == 'p2'
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X