Ajouter le texte au début de la chaîne

Réponses:

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

Cela ne fonctionnerait-il pas pour vous?

Thor Jacobsen
la source
Bien que cette solution puisse sembler "inefficace" aux développeurs qui se sont habitués aux astuces utilisées dans d'autres langues, voici des tests, comparant cela à d'autres solutions: jsperf.com/prepend-text-to-string/5
metalim
Attendez ne pas utiliser + = fonctionnerait aussi ou l'ajouterait-il à la fin
JuicY_Burrito
2
@JuicY_Burrito +=Ajoute à la fin du texte.
Mark Kramer
127

Vous pouvez le faire de cette façon.

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

console.log(mystr);

avertissement: http://xkcd.com/208/


Attendez, j'ai oublié d'échapper à un espace.  Wheeeeee [taptaptap] eeeeee.

Gabriele Petrioli
la source
13
Je suis tenté de voter pour la bande xkcd. Super truc! Votre solution élégante est probablement plus lente car elle instancie le processeur d'expressions régulières.
Rolf
13
@Rolf pas très probablement. C'est certainement plus lent que la prestring + 'original string';solution.
Gabriele Petrioli
2
@GabrielePetrioli L'avantage est que vous pouvez simplement ajouter à votre chaîne de points (pipeline). Vous pouvez même ajouter quelque chose, comme so mystr.replace (/ $ /, 'by Gabriele'). C'est peut-être plus lent, mais c'est exactement ce que je recherchais.
Mateja Petrovic
2
Cela devrait peut-être être la nouvelle norme: chaque message doit également inclure le XKCD pertinent.
Brett84c
1
pour une raison quelconque, je pensais que l'ordinateur sur le bureau était en fait un bébé dans un berceau, et j'ai également pensé que c'était bizarre que le gars frappe le bébé.
thedanotto
30

Puisque la question est de savoir quel est le méthode plus rapide , j'ai pensé ajouter quelques métriques de performance.

TL; DR Le gagnant, par une large marge, est l' +opérateur, et veuillez ne jamais utiliser de regex

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

entrez la description de l'image ici

KyleMit
la source
1
Puisque nous voulons tester le préfixe , et pas seulement la concaténation, j'ai mis à jour les tests: jsperf.com/prepend-text-to-string/5
metalim
@metalim, y a-t-il eu des changements importants que vous avez apportés aux tests? Un préfixe n'est que la moitié ordonnée de la concaténation de chaînes. De plus, pour jsPerf, vous n'avez pas besoin de lancer les cas de test dans une boucle; jsPerf appelle chaque méthode des milliers de fois pour obtenir une base de scores. Les tests Perf optimisent des scénarios particuliers et je ne suis pas sûr de la fréquence à laquelle il ajoute 1000 fois la même chaîne.
KyleMit
Il peut y avoir une différence significative si vous ajoutez une chaîne courte à une chaîne longue ou une chaîne longue à une chaîne courte. Puisque nous sommes intéressés à ajouter une chaîne courte à une chaîne arbitraire, c'est ce qui est fait dans les tests: ajouter une chaîne courte à une chaîne plus longue. Les boucles sont là pour tester 1000 longueurs différentes de la chaîne de suffixe, pour éviter de tester juste court ou juste long. @KyleMit, si vous avez une meilleure idée, n'hésitez pas à l'implémenter lors de la prochaine itération de test.
metalim
14

ES6:

let after = 'something after';
let text = `before text ${after}`;
Griffi
la source
7
Bien que cet extrait de code puisse résoudre la question, inclure une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, cela réduit la lisibilité du code et des explications!
kayess
1
ES6: String Interpolation
Bryan Grace
8

tu pourrais aussi le faire de cette façon

"".concat("x","y")
chirag
la source
1
et pourquoi pas "x" .concat ("y")? Juste pour ajouter une autre instanciation de chaîne et la ralentir?
metalim
6

Si vous souhaitez utiliser la version de Javascript appelée ES 2015 (alias ES6) ou une version ultérieure, vous pouvez utiliser des chaînes de modèle introduites par ES 2015 et recommandées par certaines directives (comme le guide de style d'Airbnb ):

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

Une autre option serait d'utiliser join

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

Vous pouvez utiliser

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