web-dev-qa-db-ja.com

配列を関数の引数リストに変換する

JavaScriptの配列を関数の引数シーケンスに変換することは可能ですか?例:

run({ "render": [ 10, 20, 200, 200 ] });

function run(calls) {
  var app = .... // app is retrieved from storage
  for (func in calls) {
    // What should happen in the next line?
    var args = ....(calls[func]);
    app[func](args);  // This is equivalent to app.render(10, 20, 200, 200);
  }
}
224
dpq

はい。 JSの現在のバージョンでは、次を使用できます。

app[func]( ...args );

ES5以前のユーザーは、.apply()メソッドを使用する必要があります。

app[func].apply( this, args );

MDNでこれらのメソッドを読んでください:

273
shuckster

同様のトピックに関する別の投稿の非常に読みやすい例:

var args = [ 'p0', 'p1', 'p2' ];

function call_me (param0, param1, param2 ) {
    // ...
}

// Calling the function using the array with apply()
call_me.apply(this, args);

ここで元の投稿へのリンク 私はその読みやすさのために個人的に好きだった

118
Wilt
app[func].apply(this, args);
24
Eric Anderson

Stack Overflowに投稿された 類似した質問 をご覧ください。 .apply()メソッドを使用してこれを実現します。

12
JJ Geewax

@bryc-はい、次のようにできます:

Element.prototype.setAttribute.apply(document.body,["foo","bar"])

しかし、それは多くの作業と難読化のように思えます:

document.body.setAttribute("foo","bar")
1
user1527225