Hier gibt es viele Antworten, und alle basieren auf zwei Methoden:
- METHODE 1: Teilen Sie die Zeichenfolge mit zwei Teilzeichenfolgen und füllen Sie das Zeichen dazwischen
- METHODE 2: Konvertieren Sie die Zeichenfolge in ein Zeichenarray, ersetzen Sie ein Arraymitglied und verbinden Sie es
Persönlich würde ich diese beiden Methoden in verschiedenen Fällen anwenden. Lassen Sie mich erklären.
@FabioPhms: Ihre Methode war die, die ich ursprünglich verwendet habe, und ich hatte Angst, dass sie auf einer Zeichenfolge mit vielen Zeichen schlecht ist. Die Frage ist jedoch, was viele Charaktere sind. Ich habe es an 10 "Lorem Ipsum" -Absätzen getestet und es hat ein paar Millisekunden gedauert. Dann habe ich es an einer 10-mal größeren Saite getestet - es gab wirklich keinen großen Unterschied. Hm.
@vsync, @Cory Mawhorter: Ihre Kommentare sind eindeutig; Was ist jedoch wieder eine große Zeichenfolge? Ich bin damit einverstanden, dass für 32 ... 100kb die Leistung besser sein sollte und man für diese eine Operation der Zeichenersetzung eine Teilzeichenfolgenvariante verwenden sollte.
Aber was passiert, wenn ich einige Ersetzungen vornehmen muss?
Ich musste meine eigenen Tests durchführen, um zu beweisen, was in diesem Fall schneller ist. Angenommen, wir haben einen Algorithmus, der eine relativ kurze Zeichenfolge manipuliert, die aus 1000 Zeichen besteht. Wir erwarten, dass im Durchschnitt jedes Zeichen in dieser Zeichenfolge ~ 100 Mal ersetzt wird. Der Code zum Testen von so etwas lautet also:
var str = "... {A LARGE STRING HERE} ...";
for(var i=0; i<100000; i++)
{
var n = '' + Math.floor(Math.random() * 10);
var p = Math.floor(Math.random() * 1000);
// replace character *n* on position *p*
}
Ich habe eine Geige dafür geschaffen, und sie ist hier . Es gibt zwei Tests, TEST1 (Teilzeichenfolge) und TEST2 (Array-Konvertierung).
Ergebnisse:
- TEST1: 195 ms
- TEST2: 6 ms
Es scheint, dass die Array-Konvertierung die Teilzeichenfolge um 2 Größenordnungen übertrifft! Also - was zur Hölle ist hier passiert ???
Was tatsächlich passiert, ist, dass alle Operationen in TEST2 auf dem Array selbst ausgeführt werden, wobei Zuweisungsausdrücke wie verwendet werden strarr2[p] = n
. Die Zuweisung ist im Vergleich zur Teilzeichenfolge auf einer großen Zeichenfolge sehr schnell und es ist klar, dass sie gewinnen wird.
Es geht also darum, das richtige Werkzeug für den Job auszuwählen. Nochmal.
str[0] = 'x'
es keine Fehler zu werfen scheint, aber nicht den gewünschten Effekt hat!