Javascriptのreplace関数は第二引数に無名関数をとって、それをコールバック関数にして文字列の置換ができることを知った.それを試すためにsprintfみたいなのを書いた。あくまでsprintf「風」ね. %sを文字列で置き換えるだけ
function sprintf(){ var format = arguments[0]; // format var args = arguments; var i=1; return format.replace(/%s/g, function(){ return args[i++]; }); } sprintf("%s is %s" , 'cinnamon' , 'dog'); // "cinnamon is dog"
もうちょっと「ぽく」してみる。
//argumentsにArrayのプロトタイプの関数を適用させるタイプ function sprintf2(){ var format = Array.prototype.shift.apply(arguments); var args = arguments; var i=0; return format.replace(/%s/g, function(){ return args[i++]; }); } sprintf2("%s is not %s" , 'hiboma' , 'dog'); // "hiboma is not dog" //例えば url = "http://example.com/search?id=%s&word=%s"; sprintf2(url , 100 , encodeURI("hogehog hogehoge")); //"http://example.com/search?id=100&word=hogehog%20hogehoge"
- 引数の数が合わないとundefinedでうまる
- argumentsオブジェクトを使ってるので引数の数を心配しなくていい
ところで「Javascript sprintf」でググると
いっぱいでてくる。....まずはググれと。