Anteponi il testo all'inizio della stringa


Risposte:



127

Potresti farlo in questo modo ..

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

console.log(mystr);

disclaimer: http://xkcd.com/208/


Aspetta, ho dimenticato di scappare da uno spazio.  WHEEEEEE [taptaptap] eeeeee.


13
Sono tentato di votare questo per la striscia xkcd. Roba fantastica! La tua soluzione elegante è molto probabilmente più lenta perché istanzia il processore delle espressioni regolari.
Rolf

13
@ Rolf non molto probabilmente. È certamente più lento della prestring + 'original string';soluzione.
Gabriele Petrioli

2
@GabrielePetrioli Il vantaggio è che puoi semplicemente aggiungere alla tua catena di punti (pipeline). Puoi persino aggiungere qualcosa, come in questo caso mystr.replace (/ $ /, 'di Gabriele'). Potrebbe essere più lento, ma è esattamente quello che stavo cercando.
Mateja Petrovic

2
Forse questo dovrebbe essere il nuovo standard: ogni post deve includere anche XKCD pertinenti.
Brett84c

1
per qualche ragione ho pensato che il computer sulla scrivania fosse in realtà un bambino in una culla, e ho anche pensato che fosse strano che il ragazzo stesse picchiando il bambino.
thedanotto

30

Poiché la domanda riguarda qual è il metodo più veloce , ho pensato di aggiungere alcune metriche di prestazione.

TL; DR Il vincitore, con un ampio margine, è l' +operatore e per favore non usare mai regex

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

inserisci qui la descrizione dell'immagine


1
Dato che vogliamo testare anteporre , e non solo concatenare, ho aggiornato i test: jsperf.com/prepend-text-to-string/5
metalim

@metalim, ci sono state modifiche sostanziali che hai apportato ai test? Un prepend è solo la metà ordinata della concatenazione di stringhe. Inoltre, per jsPerf, non è necessario lanciare i casi di test in un ciclo; jsPerf chiama ogni metodo migliaia di volte per ottenere una linea di base dei punteggi. I test perf ottimizzano scenari particolari e non sono sicuro di quanto sia comune anteporre la stessa stringa 1.000 volte.
KyleMit

Può esserci una differenza significativa se aggiungi una stringa corta a una lunga o una stringa lunga a una breve. Poiché siamo interessati a anteporre una stringa corta a una stringa arbitraria, questo è ciò che viene fatto nei test: anteporre una stringa breve all'aumento di una stringa più lunga. I loop sono lì per testare 1000 diverse lunghezze della stringa del suffisso, per evitare di testare solo brevi o solo lunghi. @KyleMit, se hai un'idea migliore, sentiti libero di implementarla nella prossima iterazione di prova.
metalim

14

ES6:

let after = 'something after';
let text = `before text ${after}`;

7
Sebbene questo snippet di codice possa risolvere la domanda, includere una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice. Cerca anche di non affollare il tuo codice con commenti esplicativi, questo riduce la leggibilità sia del codice che delle spiegazioni!
kayess

1
ES6: String Interpolation
Bryan Grace

8

potresti farlo anche in questo modo

"".concat("x","y")

1
e perché non "x" .concat ("y")? Solo per aggiungere un'altra istanza di stringa e renderla più lenta?
metalim


2

Un'altra opzione potrebbe essere quella di utilizzare join

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

0

Puoi usare

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.