2009-11-25 20 views
23

この配列を関数に文字列として渡す方法を教えてください。このコードは機能しませんが、私は何をしようとしているのかを示していると思います。配列を別の引数文字列に変換する

var strings = ['one','two','three']; 

someFunction(strings.join("','")); // someFunction('one','two','three'); 

ありがとう!

答えて

41

apply()を使用してください。

var strings = ['one','two','three']; 

someFunction.apply(null, strings); // someFunction('one','two','three'); 

あなたの関数は、オブジェクトのスコープを気にした場合、あなたはthisではなくnullの最初の引数として設定されるようにしたいと思うものを渡します。

+0

また、「null」はES5で呼び出しまたは適用に有効なパラメータではありません。 –

+1

Nullはes5の有効な引数であり、es3ではグローバルオブジェクトで置き換えられます。いくつかの実装上の違いがありますが、nullが有効です。https://esdiscuss.org/topic/function-prototype-apply-function-prototype-call-with-undefined-or-null-as-thisarg –

11

解決方法は単純ですが、JavaScriptの各関数には "apply"というメソッドがあり、渡す引数を配列として取ります。

ので:オブジェクトのないページではその機能だけであれば適用で

var strings = ["one", "two", "three"]; 
someFunction.apply(this, strings); 

「これは」そうでない場合、あなたがしたい範囲を通過し、その後、これをnullに設定し、範囲を示し、それを呼び出すときのメソッド。

ターンでは、someFunctionの内側に、あなたはあなたのコードを記述します。このような何か:

var strings = ["one", "two", "three"]; 
someFunction(...strings); 

参照:あなたは特別な '非構造' 演算子を使用することができますES6 JavaScriptが

function someFunction() { 
    var args = arguments; // the stuff that was passed in 
    for(var i = 0; i < args; ++i) { 
    var argument = args[i]; 
    } 
} 
+0

|引数を参照するだけです|ほとんどの(すべての)ブラウザでJavaScriptの実行が遅くなります。 – sdwilsh

+2

これは一例であり、パフォーマンスチューニングの演習ではありません。 – Michael

関連する問題