私は値の配列を持っています:
['a', 'b', 'c', 'd']
そして、これらをパラメーターとして関数に渡す必要があります。
window.myFunction('a', 'b', 'c', 'd');
配列/オブジェクトを関数に渡すことができればこれは簡単ですが、関数は他の人によって書かれているか、すでに存在していて変更できません-個別のパラメーターとして渡す必要があります。これを解決する必要があります。
渡される値の数に一貫性がありません。それは1つかもしれません、それは100かもしれません。
繰り返しになりますが、関数に影響を与えることはできません。関数はそのようになっており、関数に渡す値の配列を常に受け取ります。
使用 .apply
Functionオブジェクトのメソッド。
window.myFunction.apply(window, ['a','b','c','d']);
.apply
メソッドは、呼び出している関数を呼び出しますが、関数のthis
値(最初の引数)を設定し、配列(2番目の引数)を使用して引数を設定できます。
したがって、ここではwindow
をthis
値として保持し、配列を個々の引数として渡します。配列メンバーは、個別の引数として渡されたかのように配布されるため、次のように実行したかのようになります。
window.myFunction('a','b','c','d');
試してみてください
window.myFunction.apply(window, ['a', 'b', 'c', 'd']);
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);
}
_var arr = ['a','b','c'];
function echo(x){
console.log(x)
}
function go(){
arr.map(echo);
}
_
<button onclick="go()">Test</button>