Anteponer texto al comienzo de la cadena

Respuestas:

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

¿No funcionaría esto para ti?

Thor Jacobsen
fuente
Si bien esta solución puede parecer "ineficaz" para los desarrolladores que se acostumbraron a los trucos utilizados en otros idiomas, aquí hay pruebas, comparándola con otras soluciones: jsperf.com/prepend-text-to-string/5
metalim
Wait no usaría + = funcionaría tan bien o lo agregaría al final
JuicY_Burrito
2
@JuicY_Burrito Se agrega +=al final del texto.
Mark Kramer
127

Podrías hacerlo de esta manera ...

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

console.log(mystr);

descargo de responsabilidad: http://xkcd.com/208/


Espera, olvidé escapar de un espacio.  Wheeeeee [taptaptap] eeeeee.

Gabriele Petrioli
fuente
13
Estoy tentado a votar a favor de la tira xkcd. ¡Buena cosa! Su elegante solución probablemente sea más lenta porque crea una instancia del procesador de expresiones regulares.
Rolf
13
@Rolf probablemente no. Ciertamente es más lento que la prestring + 'original string';solución.
Gabriele Petrioli
2
@GabrielePetrioli La ventaja es que solo puede agregar a su cadena de puntos (canalización). Incluso puede agregar algo, como mystr.replace (/ $ /, 'por Gabriele'). Puede que sea más lento, pero es exactamente lo que estaba buscando.
Mateja Petrovic
2
Quizás este debería ser el nuevo estándar: cada publicación también debe incluir XKCD relevante.
Brett84c
1
por alguna razón pensé que la computadora en el escritorio era en realidad un bebé en un moisés, y también pensé que era extraño que el tipo golpeara al bebé.
thedanotto
30

Dado que la pregunta es sobre cuál es el método más rápido , pensé en agregar algunas métricas de rendimiento.

TL; DR El ganador, por un amplio margen, es el +operador, y por favor, no use expresiones regulares

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

ingrese la descripción de la imagen aquí

KyleMit
fuente
1
Como queremos probar prepend , y no solo concatenar, he actualizado las pruebas: jsperf.com/prepend-text-to-string/5
metalim
@metalim, ¿hubo algún cambio importante que hiciste en las pruebas? Un prefijo es solo la mitad ordenada de la concatenación de cadenas. Además, para jsPerf, no es necesario lanzar los casos de prueba en un bucle; jsPerf llama a cada método miles de veces para obtener una línea de base de puntuaciones. Las pruebas de rendimiento optimizan escenarios particulares, y no estoy seguro de qué tan común es anteponer la misma cadena 1000 veces.
KyleMit
Puede haber una diferencia significativa si agrega una cadena corta a una larga o una cadena larga a una corta. Como estamos interesados ​​en anteponer una cadena corta a una cadena arbitraria, eso es lo que se hace en las pruebas: anteponer una cadena corta a una cadena más larga. Los bucles están ahí para probar 1000 longitudes diferentes de la cadena de sufijo, para evitar pruebas cortas o largas. @KyleMit, si tiene una mejor idea, no dude en implementarla en la próxima iteración de prueba.
metalim
14

ES6:

let after = 'something after';
let text = `before text ${after}`;
Griffi
fuente
7
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo a la pregunta para los lectores en el futuro, y es posible que esas personas no conozcan los motivos de su sugerencia de código. Por favor, trate también de no llenar su código con comentarios explicativos, ¡esto reduce la legibilidad tanto del código como de las explicaciones!
kayess
1
ES6: Interpolación de cadenas
Bryan Grace
8

también puedes hacerlo de esta manera

"".concat("x","y")
chirag
fuente
1
y ¿por qué no "x" .concat ("y")? ¿Solo para agregar otra instanciación de cadena y hacerlo más lento?
metalim
6

Si desea usar la versión de Javascript llamada ES 2015 (también conocida como ES6) o posterior, puede usar cadenas de plantilla introducidas por ES 2015 y recomendadas por algunas pautas (como la guía de estilo de Airbnb ):

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

Otra opción sería usar join

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

Puedes usar

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