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?

Thor Jacobsen
quelle
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.

Gabriele Petrioli
quelle
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

KyleMit
quelle
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}`;
Griffi
quelle
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")
Chirag
quelle
1
und warum nicht "x" .concat ("y")? Nur um eine weitere String-Instanziierung hinzuzufügen und langsamer zu machen?
Metalim
6

Wenn Sie die Version von Javascript mit dem Namen ES 2015 (auch bekannt als ES6) oder höher verwenden möchten, können Sie Vorlagenzeichenfolgen verwenden, die von ES 2015 eingeführt und von einigen Richtlinien empfohlen wurden (wie dem Airbnb-Styleguide ):

const after = "test";
const mystr = `This is: ${after}`;
Ilan Schemoul
quelle
2

Eine andere Option wäre die Verwendung von join

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

Sie können verwenden

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
Mayank
quelle