2012-04-13 9 views

Antwort

0
var myStr = []; 

myStr.push('something') 

console.log(myStr.join("")) 
0

Wenn Sie mit viel beschäftigen von Strings dann einen Array mit dem Sie die Zeichenfolge Teilen und am Ende join sie (mit einem leeren String als Trennzeichen) push scheinen die effizienteste plattformübergreifend zu sein.

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

produzieren:

"foo bar baz"

+0

im Idealfall, dass ersetzen würde '# {...}' zu Mangeln Strings zu vermeiden, enthalten könnte Geschweifte Klammern. Zum Beispiel ein JavaScript-Code-Snippet. – tadman

+0

kein Problem, egal, dies nur für {Nummer} und nichts anderes suchen. – pylover

0

"Gibt es eine JavaScript-Äquivalent von rubys “#{}” Sequenzen?"

Bezüglich eines äquivalenten, Nr. JavaScript hat nativ keine String-Interpolation. Obwohl Sie eine Funktion verwenden könnten, um es zu einem gewissen Grad zu replizieren.

1

Chris Nielsen hat eine reine JavaScript-Lösung in this answer bereitgestellt:

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' })); 

Sie könnten auch Coffeescript verwenden, die eine Sprache ist, die JavaScript kompiliert. It supports string interpolation:

author = "Wittgenstein" 
quote = "A picture is a fact. -- #{ author }" 
0

pylover's answer werden Sie etwas wie geben, was Sie wollen.

Sie auch in CoffeeScript aussehen könnte, was eine schöne Sprache ist, die zu JavaScript kompiliert und String-Interpolation hat unter anderem (vielleicht zu viele) Funktionen.

1

Sorry Jungs aber all dies ist nicht sehr der Rubin Weg, hier ist eine grundlegende p Äquivalent, Entschuldigung für die Eval, das kann sicherlich besser gemacht werden .. Wenn Sie nur die Verkettung wollen, ersetzen Sie einfach die document.write durch Rückkehr in der ersten Lösung

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 

EDIT: ich habe eine Prototyp-Version, hatte einige Schwierigkeiten mit, dass man

Verwandte Themen