web-dev-qa-db-ja.com

配列から関数にすべての値をパラメーターとして渡します

私は値の配列を持っています:

['a', 'b', 'c', 'd']

そして、これらをパラメーターとして関数に渡す必要があります。

window.myFunction('a', 'b', 'c', 'd');

配列/オブジェクトを関数に渡すことができればこれは簡単ですが、関数は他の人によって書かれているか、すでに存在していて変更できません-個別のパラメーターとして渡す必要があります。これを解決する必要があります。

渡される値の数に一貫性がありません。それは1つかもしれません、それは100かもしれません。

繰り返しになりますが、関数に影響を与えることはできません。関数はそのようになっており、関数に渡す値の配列を常に受け​​取ります。

16
Randy Hall

使用 .applyFunctionオブジェクトのメソッド。

window.myFunction.apply(window, ['a','b','c','d']);

.applyメソッドは、呼び出している関数を呼び出しますが、関数のthis値(最初の引数)を設定し、配列(2番目の引数)を使用して引数を設定できます。

したがって、ここではwindowthis値として保持し、配列を個々の引数として渡します。配列メンバーは、個別の引数として渡されたかのように配布されるため、次のように実行したかのようになります。

window.myFunction('a','b','c','d');
25
Blue Skies

試してみてください

window.myFunction.apply(window, ['a', 'b', 'c', 'd']);
5
hazerd

ES6では、スプレッド構文を使用できます。

Docs からのように:

Spread構文を使用すると、配列式や文字列などの反復可能オブジェクトを、0個以上の引数(関数呼び出しの場合)または要素(配列リテラルの場合)が予想される場所で展開したり、オブジェクト式を0個以上の場所で展開したりできます。キーと値のペア(オブジェクトリテラル用)が必要です。

構文は次のようになります。

var array = ['a', 'b', 'c', 'd'];
myFunction(...array);

デモ:

var array = ['a', 'b', 'c', 'd'];
myFunction(...array);

function myFunction(p1, p2, p3, p4) {
  console.log(p1, p2, p3, p4);
}
2
Mohammad Usman

Array.prototype.map()

_var arr = ['a','b','c'];

function echo(x){ 
  console.log(x)
}

function go(){
  arr.map(echo);
}_
<button onclick="go()">Test</button>
0
Ronnie Royston