Anteponer texto al comienzo de la cadena


Respuestas:


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

¿No funcionaría esto para ti?


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.


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í


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}`;

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")

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



0

Puedes usar

var mystr = "Doe";
mystr = "John " + mystr;
console.log(mystr)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.