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


Odpowiedzi:


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

Czy to nie zadziałałoby dla Ciebie?


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.


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


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}`;

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")

1
i dlaczego nie "x" .concat ("y")? Czy chcesz tylko dodać kolejną instancję ciągu i spowolnić ją?
metalim



0

Możesz użyć

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.