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.