文字列連結を行うよりも JavaScript で文字列を構築するためのより良い方法はありますか?
たくさんの "foo" + bar + "baz" を実行する代わりに、文字列内の変数を展開できる ruby のようなことができれば、コードがよりきれいになります。
文字列連結を行うよりも JavaScript で文字列を構築するためのより良い方法はありますか?
たくさんの "foo" + bar + "baz" を実行する代わりに、文字列内の変数を展開できる ruby のようなことができれば、コードがよりきれいになります。
String.prototype.format = function() {
var args = arguments;
return this.replace(/{(\d+)}/g, function(match, number) {
return typeof args[number] != 'undefined'
? args[number]
: match
;
});
};
console.log("{0} bar {1}.".format("foo","baz"));
生産します:
「フーバーバズ」
Chris Nielsenは、この回答で純粋な JavaScript ソリューションを提供しています。
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
alert("I'm {age} years old!".supplant({ age: 29 }));
alert("The {a} says {n}, {n}, {n}!".supplant({ a: 'cow', n: 'moo' }));
JavaScript にコンパイルされる言語である CoffeScript を使用することもできます。文字列補間をサポートしています:
author = "Wittgenstein"
quote = "A picture is a fact. -- #{ author }"
申し訳ありませんが、これはすべてRubyの方法ではありません。これは基本的なpの同等物です。evalで申し訳ありませんが、確かにもっとうまくいく可能性があります。解決
function p(str){
document.write(str.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>");
}
String.prototype.p = function() {
return this.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>";
};
var f="foo", b="bar"
p("#{f} #{b}")
document.write("#{f} #{b}".p());
=> foo bar
=> foo bar
編集:プロトタイプバージョンを追加しましたが、そのバージョンにはいくつかの問題がありました
pyloverの答えは、あなたが望むもののようなものをあなたに与えるでしょう.
また、 CoffeeScriptを調べることもできます。これは、JavaScript にコンパイルでき、文字列補間などの (おそらく多すぎる) 機能を備えた優れた言語です。
var myStr = [];
myStr.push('something')
console.log(myStr.join(""))
多くの文字列を扱う場合push
、文字列の部分と最後join
に (区切り文字として空の文字列を使用して) 配列を使用することが、プラットフォーム間で最も効率的であるように思われます。