2016-04-15 4 views
0

配列要素をbob bob.string.formatString形式の文字列に渡して、任意の数の引数を渡して、プレースホルダの必須パラメータを自動的に入力するようにします。ここで私が試したことがあります。配列要素をbob.jsに渡すformatString関数

var string = "Hi {0} and {1}."; 
var x = "Hello"; 
var y = "world"; 
var result = test(string ,[x,y]) 

function test(string ,args){ 
//return bob.string.formatString(string, args[0] , args[1]); -> This gives me correct output 
str = bob.string.formatString.apply(string , args); 
console.log("final string:" + str); // --> This gives me only Hello 

"Hi Hello and world"を出力します。

答えて

1

applyの最初の引数はthisArgです。その関数呼び出しの値はthisです。代わりに:これはまた、1 Nの引数を取り、formatStringに渡し

function test(string) { 
    var args = [].slice.call(arguments, 1); 
    str = bob.string.formatString.apply(null, [string].concat(args)); 
    console.log("final string:" + str); 
} 

:としてあなたはまた、あなたの関数を定義することができ

str = bob.string.formatString.apply(null, [string].concat(args)); 
// or 
str = bob.string.formatString.apply(bob.string, [string].concat(args)); 

str = bob.string.formatString.apply(string , args); 

あなたがそれを呼び出す必要があります。 ES6では、公式のrestパラメータを使用することができます:

function test(string, ...args) { 
    str = bob.string.formatString(string, ...args); 
    console.log("final string:" + str); 
} 
+0

「この文字列をフォーマットできません:インデックス1の引数が見つかりません」というエラーが表示されます。私は 'var result = test(string、[x、y])'と同じ方法でテスト関数を呼び出し、テスト関数の実装を追加しました。(両方の関数を試しました) – aaj

+0

ああ、 'test 、x、y) 'である。一般的な引数転送機能の実行方法を示すために追加したものです。 argsをフォーマットするために配列を使用する必要がある場合は、元のテスト関数をそのまま使用してください。 –

+0

あなたは私の命を救った!どうもありがとう :) – aaj