2

文字列連結を行うよりも JavaScript で文字列を構築するためのより良い方法はありますか?

たくさんの "foo" + bar + "baz" を実行する代わりに、文字列内の変数を展開できる ruby​​ のようなことができれば、コードがよりきれいになります。

4

8 に答える 8

7
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"));

生産します:

「フーバーバズ」

于 2012-04-13T16:11:40.280 に答える
1

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 }"
于 2012-04-13T16:15:53.363 に答える
1

申し訳ありませんが、これはすべて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

編集:プロトタイプバージョンを追加しましたが、そのバージョンにはいくつかの問題がありました

于 2012-04-13T19:49:39.553 に答える
0
于 2012-04-13T16:14:37.470 に答える
0

pyloverの答えは、あなたが望むもののようなものをあなたに与えるでしょう.

また、 CoffeeScriptを調べることもできます。これは、JavaScript にコンパイルでき、文字列補間などの (おそらく多すぎる) 機能を備えた優れた言語です。

于 2012-04-13T16:16:47.130 に答える
0
var myStr = [];

myStr.push('something')

console.log(myStr.join(""))
于 2012-04-13T16:11:11.327 に答える
0

多くの文字列を扱う場合push、文字列の部分と最後joinに (区切り文字として空の文字列を使用して) 配列を使用することが、プラットフォーム間で最も効率的であるように思われます。

于 2012-04-13T16:11:23.547 に答える