Anexar texto ao início da string

Respostas:

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

Isso não funcionaria para você?

Thor Jacobsen
fonte
Embora essa solução possa parecer "ineficiente" para desenvolvedores que se acostumaram com truques usados ​​em outras linguagens, aqui estão os testes, comparando isso com outras soluções: jsperf.com/prepend-text-to-string/5
metalim
Esperar não funcionaria tão bem com + = ou adicionaria ao final
JuicY_Burrito
2
@JuicY_Burrito +=Anexa ao final do texto.
Mark Kramer
127

Você poderia fazer assim ..

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

console.log(mystr);

isenção de responsabilidade: http://xkcd.com/208/


Espere, esqueci de escapar de um espaço.  Wheeeeee [taptaptap] eeeeee.

Gabriele Petrioli
fonte
13
Estou tentado a votar a favor disso para a tira xkcd. Coisas boas! Sua solução elegante é provavelmente mais lenta porque instancia o processador de expressões regulares.
Rolf
13
@Rolf provavelmente não. Certamente é mais lento do que a prestring + 'original string';solução.
Gabriele Petrioli
2
@GabrielePetrioli A vantagem é que você pode simplesmente adicionar à sua cadeia de pontos (pipeline). Você pode até acrescentar algo, como mystr.replace (/ $ /, 'por Gabriele'). Pode ser mais lento, mas é exatamente o que eu estava procurando.
Mateja Petrovic
2
Talvez este deva ser o novo padrão: cada postagem também deve incluir o XKCD relevante.
Brett84c
1
por algum motivo, pensei que o computador na mesa fosse na verdade um bebê em um berço, e também achei estranho o cara estar batendo no bebê.
thedanotto
30

Uma vez que a questão é sobre o que é mais rápido método , pensei em adicionar algumas métricas de desempenho.

TL; DR O vencedor, por ampla margem, é o +operador, e por favor nunca use regex

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

insira a descrição da imagem aqui

KyleMit
fonte
1
Como queremos testar prefixar , e não apenas concatenar, atualizei os testes: jsperf.com/prepend-text-to-string/5
metalim
@metalim, houve alguma alteração significativa que você fez nos testes? Um prefixo é apenas a metade ordenada da concatenação de string. Além disso, para jsPerf, você não precisa lançar os casos de teste em um loop; jsPerf chama cada método milhares de vezes para obter uma linha de base das pontuações. Os testes de desempenho otimizam cenários específicos, e não tenho certeza de quão comum é o prefixo da mesma string 1.000 vezes.
KyleMit
Pode haver uma diferença significativa se você anexar string curta a longa, ou string longa a curta. Uma vez que estamos interessados ​​em adicionar uma string curta a uma string arbitrária, isso é o que é feito nos testes: prefixar uma string curta a uma string maior. Os loops existem para testar 1000 comprimentos diferentes da string de sufixo, para evitar testes apenas curtos ou apenas longos. @KyleMit, se você tiver uma ideia melhor, sinta-se à vontade para implementá-la na próxima iteração de teste.
metalim
14

ES6:

let after = 'something after';
let text = `before text ${after}`;
Griffi
fonte
7
Embora este snippet de código possa resolver a questão, incluir uma explicação realmente ajuda a melhorar a qualidade de sua postagem. Lembre-se de que você está respondendo à pergunta para leitores no futuro e essas pessoas podem não saber os motivos de sua sugestão de código. Tente também não sobrecarregar seu código com comentários explicativos, isso reduz a legibilidade do código e das explicações!
kayess de
1
ES6: Interpolação de strings
Bryan Grace
8

você também pode fazer assim

"".concat("x","y")
chirag
fonte
1
e por que não "x" .concat ("y")? Apenas para adicionar outra instanciação de string e torná-la mais lenta?
metalim
6

Se você deseja usar a versão do Javascript chamada ES 2015 (também conhecida como ES6) ou posterior, pode usar strings de modelo introduzidas pelo ES 2015 e recomendadas por algumas diretrizes (como o guia de estilo do Airbnb ):

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

Outra opção seria usar join

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

Você pode usar

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