Stellen Sie den Text an den Anfang der Zeichenfolge


Antworten:


214
var mystr = "Doe";
mystr = "John " + mystr;

Würde das nicht für dich funktionieren?


Während diese Lösung Entwicklern, die sich an Tricks in anderen Sprachen gewöhnt haben,
metalim

Warten Sie, würde + = nicht auch funktionieren oder würde es am Ende hinzufügen
JuicY_Burrito

2
@JuicY_Burrito +=Wird an das Ende des Textes angehängt.
Mark Kramer

127

Sie könnten es so machen ..

var mystr = 'is my name.';
mystr = mystr.replace (/^/,'John ');

console.log(mystr);

Haftungsausschluss: http://xkcd.com/208/


Warten Sie, vergessen, einem Raum zu entkommen.  Wheeeeee [taptaptap] eeeeee.


13
Ich bin versucht, dies für den xkcd-Streifen zu verbessern. Tolles Zeug! Ihre elegante Lösung ist höchstwahrscheinlich langsamer, da sie den Prozessor für reguläre Ausdrücke instanziiert.
Rolf

13
@Rolf nicht höchstwahrscheinlich. Es ist sicherlich langsamer als die prestring + 'original string';Lösung.
Gabriele Petrioli

2
@GabrielePetrioli Der Vorteil ist, dass Sie einfach zu Ihrer Punktkette (Pipeline) hinzufügen können. Sie können sogar etwas anhängen, wie z. B. mystr.replace (/ $ /, 'by Gabriele'). Es mag langsamer sein, aber es ist genau das, wonach ich gesucht habe.
Mateja Petrovic

2
Vielleicht sollte dies der neue Standard sein: Jeder Beitrag muss auch relevante XKCD enthalten.
Brett84c

1
Aus irgendeinem Grund dachte ich, dass der Computer auf dem Schreibtisch tatsächlich ein Baby in einem Stubenwagen war, und fand es auch seltsam, dass der Kerl das Baby schlug.
Thedanotto

29

Da es um die schnellste Methode geht, dachte ich, ich würde einige Perf-Metriken hinzufügen.

TL; DR Der Gewinner ist mit großem Abstand der +Betreiber, und bitte verwenden Sie niemals Regex

https://jsperf.com/prepend-text-to-string/1

Geben Sie hier die Bildbeschreibung ein


Da wir testen wollen prepend und nicht nur verketten, habe ich die Tests aktualisiert: jsperf.com/prepend-text-to-string/5
metalim

@metalim, gab es wesentliche Änderungen, die Sie an den Tests vorgenommen haben? Ein Prepend ist nur die geordnete Hälfte der Zeichenfolgenverkettung. Außerdem müssen Sie für jsPerf die Testfälle nicht in eine Schleife werfen. jsPerf ruft jede Methode tausende Male auf, um eine Basislinie der Ergebnisse zu erhalten. Perf-Tests optimieren bestimmte Szenarien, und ich bin mir nicht sicher, wie häufig dieselbe Zeichenfolge 1.000 Mal vorangestellt wird.
KyleMit

Es kann einen signifikanten Unterschied geben, wenn Sie eine kurze Zeichenfolge an eine lange oder eine lange Zeichenfolge an eine kurze anhängen. Da wir daran interessiert sind, eine kurze Zeichenfolge einer beliebigen Zeichenfolge voranzustellen , geschieht dies in Tests: Voranstellen einer kurzen Zeichenfolge, um eine längere Zeichenfolge zu erhöhen. Schleifen dienen dazu, 1000 verschiedene Längen der Suffix-Zeichenfolge zu testen, um zu vermeiden, dass nur kurze oder nur lange Tests durchgeführt werden. @KyleMit, wenn Sie eine bessere Idee haben, können Sie diese gerne in der nächsten Testiteration implementieren.
Metalim

14

ES6:

let after = 'something after';
let text = `before text ${after}`;

7
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch, Ihren Code nicht mit erklärenden Kommentaren zu überfüllen. Dies verringert die Lesbarkeit sowohl des Codes als auch der Erklärungen!
Kayess

1
ES6: String-Interpolation
Bryan Grace

8

Sie könnten es auch so machen

"".concat("x","y")

1
und warum nicht "x" .concat ("y")? Nur um eine weitere String-Instanziierung hinzuzufügen und langsamer zu machen?
Metalim


2

Eine andere Option wäre die Verwendung von join

var mystr = "Matayoshi";
mystr = ["Mariano", mystr].join(' ');

0

Sie können verwenden

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.