Dołącz tekst na początek łańcucha

Odpowiedzi:

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

Czy to nie zadziałałoby dla Ciebie?

Thor Jacobsen
źródło
Chociaż to rozwiązanie może wydawać się „nieefektywne” programistom, którzy przyzwyczaili się do sztuczek używanych w innych językach, oto testy porównujące je z innymi rozwiązaniami: jsperf.com/prepend-text-to-string/5
metalim
Czekaj nie używałby również + = działa, czy też
dodałoby
2
@JuicY_Burrito +=Dołącza do końca tekstu.
Mark Kramer
127

Możesz to zrobić w ten sposób ..

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

console.log(mystr);

zastrzeżenie: http://xkcd.com/208/


Czekaj, zapomniałem uciec z miejsca.  Wheeeeee [taptaptap] eeeeee.

Gabriele Petrioli
źródło
13
Kusi mnie, aby zagłosować za tym dla paska xkcd. Świetne rzeczy! Twoje eleganckie rozwiązanie jest najprawdopodobniej wolniejsze, ponieważ tworzy instancję procesora wyrażeń regularnych.
Rolf
13
@Rolf prawdopodobnie nie. Z pewnością jest wolniejszy niż prestring + 'original string';rozwiązanie.
Gabriele Petrioli
2
@GabrielePetrioli Zaletą jest to, że możesz po prostu dodać do swojego łańcucha kropek (potoku). Możesz nawet dodać coś, na przykład mystr.replace (/ $ /, 'autorstwa Gabriele'). To może być wolniejsze, ale właśnie tego szukałem.
Mateja Petrovic
2
Być może powinien to być nowy standard: każdy post musi zawierać również odpowiedni XKCD.
Brett84c
1
z jakiegoś powodu pomyślałem, że komputer na biurku to właściwie niemowlę w gondoli, a także pomyślałem, że to dziwne, że facet bije dziecko.
thedanotto
31

Ponieważ pytanie dotyczy najszybszej metody, pomyślałem, że zwymiotuję, dodając kilka wskaźników wydajności.

TL; DR Zwycięzca, przez szerokie, jest +operator, i proszę nie używać regex

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

wprowadź opis obrazu tutaj

KyleMit
źródło
1
Ponieważ chcemy testować poprzedzanie , a nie tylko konkatenację, zaktualizowałem testy: jsperf.com/prepend-text-to-string/5
metalim
@metalim, czy były jakieś istotne zmiany, które wprowadziłeś do testów? Przedrostek to tylko uporządkowana połowa konkatenacji ciągów. Ponadto w przypadku jsPerf nie trzeba wrzucać przypadków testowych w pętlę; jsPerf wywołuje każdą metodę tysiące razy, aby uzyskać linię bazową wyników. Testy wydajności optymalizują określone scenariusze i nie jestem pewien, jak często poprzedza ten sam ciąg 1000 razy.
KyleMit
Może wystąpić znacząca różnica, jeśli dodasz krótki ciąg do długiego lub długi ciąg do krótkiego. Ponieważ interesuje nas dołączanie krótkiego ciągu do dowolnego ciągu, to właśnie robi się w testach: poprzedzanie krótkiego ciągu do wydłużania dłuższego. Pętle służą do testowania 1000 różnych długości ciągu przyrostków, aby uniknąć testowania tylko krótkich lub tylko długich. @KyleMit, jeśli masz lepszy pomysł, możesz go zaimplementować w następnej iteracji testowej.
metalim
14

ES6:

let after = 'something after';
let text = `before text ${after}`;
Griffi
źródło
7
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod. Prosimy również starać się nie tłoczyć kodu komentarzami wyjaśniającymi, co zmniejsza czytelność zarówno kodu, jak i wyjaśnień!
kayess
1
ES6: Interpolacja ciągów
Bryan Grace
8

możesz to też zrobić w ten sposób

"".concat("x","y")
chirag
źródło
1
i dlaczego nie "x" .concat ("y")? Czy chcesz tylko dodać kolejną instancję ciągu i spowolnić ją?
metalim
6

Jeśli chcesz korzystać z wersji Javascript o nazwie ES 2015 (aka ES6) lub nowszej, możesz użyć ciągów szablonów wprowadzonych przez ES 2015 i zalecanych przez niektóre wytyczne (takie jak przewodnik stylów Airbnb ):

const after = "test";
const mystr = `This is: ${after}`;
Ilan Schemoul
źródło
2

Inną opcją byłoby użycie złączenia

var mystr = "Matayoshi";
mystr = ["Mariano", mystr].join(' ');
MatayoshiMariano
źródło
0

Możesz użyć

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
Mayank
źródło