Ich sehe einige Code-Projektlösungen .
Aber gibt es eine regelmäßige Implementierung in JavaScript?
javascript
stringbuilder
Leora
quelle
quelle
Antworten:
Wenn Sie Code für Internet Explorer schreiben müssen, stellen Sie sicher, dass Sie eine Implementierung ausgewählt haben, die Array-Joins verwendet. Das Verketten von Zeichenfolgen mit dem Operator
+
oder+=
ist im IE extrem langsam. Dies gilt insbesondere für IE6. In modernen Browsern+=
ist dies normalerweise genauso schnell wie Array-Joins.Wenn ich viele String-Verkettungen durchführen muss, fülle ich normalerweise ein Array und verwende keine String-Builder-Klasse:
Beachten Sie, dass die
push
Methoden mehrere Argumente akzeptieren.quelle
[foo(), "bar", "baz"].join("");
funktioniert dies auch.push
mehrere Argumente akzeptieren kann. Die zufälligen Dinge, die du lernst.Ich habe gerade die Leistung auf http://jsperf.com/javascript-concat-vs-join/2 überprüft . Die Testfälle verketten oder verbinden das Alphabet 1.000 Mal.
In aktuellen Browsern (FF, Opera, IE11, Chrome) ist "concat" etwa vier- bis zehnmal schneller als "join".
In IE8 geben beide ungefähr gleiche Ergebnisse zurück.
In IE7 ist "Join" leider etwa 100-mal schneller.
quelle
Nein, es gibt keine integrierte Unterstützung für das Erstellen von Zeichenfolgen. Sie müssen stattdessen die Verkettung verwenden.
Sie können natürlich ein Array aus verschiedenen Teilen Ihrer Zeichenfolge erstellen und
join()
dieses Array dann aufrufen. Dies hängt jedoch davon ab, wie der Join in dem von Ihnen verwendeten JavaScript-Interpreter implementiert ist.Ich habe ein Experiment durchgeführt, um die Geschwindigkeit der
str1+str2
Methode mit der der Methode zu vergleichenarray.push(str1, str2).join()
. Der Code war einfach:Ich habe es in Internet Explorer 8 und Firefox 3.5.5 getestet, beide unter Windows 7 x64.
Am Anfang habe ich eine kleine Anzahl von Iterationen getestet (einige hundert, einige tausend Elemente). Die Ergebnisse waren unvorhersehbar (manchmal dauerte die Verkettung von Zeichenfolgen 0 Millisekunden, manchmal 16 Millisekunden, das gleiche gilt für das Verbinden von Arrays).
Als ich die Anzahl auf 50.000 erhöhte, waren die Ergebnisse in verschiedenen Browsern unterschiedlich - in Internet Explorer war die Verkettung von Zeichenfolgen schneller (94 Millisekunden) und die Verknüpfung langsamer (125 Millisekunden), während in Firefox die Array-Verknüpfung schneller war (113 Millisekunden) als String-Joining (117 Millisekunden).
Dann habe ich die Anzahl auf 500'000 erhöht. Nun ist die
array.join()
war langsamer als String - Verkettung in beiden Browsern: String - Verkettung war 937 ms in Internet Explorer, 1155 ms in Firefox, Array beitreten 1265 in Internet Explorer und 1207 ms in Firefox.Die maximale Anzahl von Iterationen, die ich in Internet Explorer testen konnte, ohne dass "die Ausführung des Skripts zu lange dauert", betrug 850.000. Dann war Internet Explorer 1593 für die Verkettung von Zeichenfolgen und 2046 für die Array-Verknüpfung, und Firefox hatte 2101 für die Verkettung von Zeichenfolgen und 2249 für die Array-Verknüpfung.
Ergebnisse - Wenn die Anzahl der Iterationen gering ist, können Sie versuchen, sie zu verwenden
array.join()
, da sie in Firefox möglicherweise schneller sind. Wenn die Anzahl zunimmt, ist diestring1+string2
Methode schneller.AKTUALISIEREN
Ich habe den Test mit Internet Explorer 6 (Windows XP) durchgeführt. Der Prozess wurde angehalten, um sofort zu reagieren, und endete nie, wenn ich den Test mit mehr als 100.000 Iterationen versuchte. Bei 40.000 Iterationen waren die Ergebnisse
Dies bedeutet: Wenn Sie Internet Explorer 6 unterstützen müssen, wählen Sie,
array.join()
was viel schneller als die Verkettung von Zeichenfolgen ist.quelle
join()
ist Teil von ECMAScript und wird von jedem JavaScript-Interpreter implementiert. Warum sollte es "abhängen"?Dieser Code sieht aus wie die Route, die Sie mit ein paar Änderungen einschlagen möchten.
Sie sollten die Append-Methode so ändern, dass sie so aussieht. Ich habe es geändert, um die Nummer 0 zu akzeptieren und es zurückgeben zu lassen,
this
damit Sie Ihre Anhänge verketten können.quelle
null
,false
, leere Strings,undefined
oderNaN
.Die ECMAScript 6-Version (auch bekannt als ECMAScript 2015) von JavaScript führte String-Literale ein .
Beachten Sie, dass Back-Ticks anstelle von einfachen Anführungszeichen die Zeichenfolge einschließen.
quelle
In C # können Sie so etwas tun
In JavaScript könnten Sie so etwas tun
quelle
{0}
ersetzt wird, enthält{1}
.Für Interessenten gibt es hier eine Alternative zum Aufrufen von Array.join:
Die Ausgabe ist erwartungsgemäß die Zeichenfolge 'foobar'. In Firefox übertrifft dieser Ansatz Array.join, wird jedoch durch + Verkettung übertroffen. Da für String.concat jedes Segment als separates Argument angegeben werden muss, ist der Aufrufer durch die von der ausführenden JavaScript-Engine festgelegte Begrenzung der Argumentanzahl begrenzt. Weitere Informationen finden Sie in der Dokumentation zu Function.prototype.apply () .
quelle
Ich habe diese Funktion definiert:
Und kann wie c # aufgerufen werden:
Ergebnis:
quelle
Wenn ich in JavaScript viel String-Verkettung mache, suche ich nach Vorlagen. Handlebars.js funktioniert recht gut und hält HTML und JavaScript besser lesbar. http://handlebarsjs.com
quelle
Wie wäre
sys.StringBuilder()
es mit dem folgenden Artikel.https://msdn.microsoft.com/en-us/library/bb310852.aspx
quelle