Tengo una cadena, digamos, Hello world
y necesito reemplazar el carácter en el índice 3. ¿Cómo puedo reemplazar un carácter especificando un índice?
var str = "hello world";
Necesito algo como
str.replaceAt(0,"h");
javascript
string
replace
character-replacement
Santhosh
fuente
fuente
str[0] = 'x'
no parece arrojar ningún error, ¡pero no tiene el efecto deseado!"use strict"
está activado:Uncaught TypeError: Cannot assign to read only property '0' of string 'hello world'
(al menos en los navegadores webkit)Respuestas:
En JavaScript, las cadenas son inmutables , lo que significa que lo mejor que puede hacer es crear una nueva cadena con el contenido modificado y asignar la variable para que apunte a ella.
Tendrá que definir la
replaceAt()
función usted mismo:Y úsalo así:
fuente
No hay
replaceAt
función en JavaScript. Puede usar el siguiente código para reemplazar cualquier carácter en cualquier cadena en la posición especificada:fuente
substr
se considera una función heredada y debe evitarse cuando sea posible .No puedes Tome los caracteres antes y después de la posición y concat en una nueva cadena:
fuente
String.prototype.substring
másString.prototype.substr
.Aquí hay muchas respuestas, y todas se basan en dos métodos:
Personalmente, usaría estos dos métodos en diferentes casos. Dejame explicar.
@FabioPhms: Su método fue el que usé inicialmente y tenía miedo de que sea malo en una cadena con muchos caracteres. Sin embargo, la pregunta es ¿qué hay muchos personajes? Lo probé en 10 párrafos "lorem ipsum" y me llevó unos milisegundos. Luego lo probé en una cadena 10 veces más grande, realmente no había gran diferencia. Hm.
@vsync, @Cory Mawhorter: sus comentarios no son ambiguos; sin embargo, de nuevo, ¿qué es una cadena grande? Estoy de acuerdo en que para 32 ... 100kb el rendimiento debería ser mejor y uno debería usar la variante de subcadena para esta operación de reemplazo de caracteres.
Pero, ¿qué sucederá si tengo que hacer bastantes reemplazos?
Necesitaba realizar mis propias pruebas para probar qué es más rápido en ese caso. Digamos que tenemos un algoritmo que manipulará una cadena relativamente corta que consta de 1000 caracteres. Esperamos que en promedio cada carácter en esa cadena sea reemplazado ~ 100 veces. Entonces, el código para probar algo como esto es:
Creé un violín para esto, y está aquí . Hay dos pruebas, TEST1 (subcadena) y TEST2 (conversión de matriz).
Resultados:
¡Parece que la conversión de matriz supera a la subcadena en 2 órdenes de magnitud! Entonces, ¿qué demonios pasó aquí?
Lo que sucede en realidad es que todas las operaciones en TEST2 se realizan en la matriz misma, utilizando expresiones de asignación como
strarr2[p] = n
. La asignación es realmente rápida en comparación con la subcadena en una cadena grande, y está claro que va a ganar.Entonces, se trata de elegir la herramienta adecuada para el trabajo. De nuevo.
fuente
El trabajo con vectores suele ser más efectivo para contactar con String.
Sugiero la siguiente función:
Ejecute este fragmento:
fuente
Array.prototype.replace = function(index, val) { this[index] = val; return this; };
'word'.split('').replace(1, '0').join(''); // returns 'w0rd'
En Javascript, las cadenas son inmutables, por lo que debe hacer algo como
Para reemplazar el carácter en x en i con 'h'
fuente
fuente
split
yjoin
One-liner usando String.replace con devolución de llamada (sin soporte de emoji):
Explicado:
fuente
Mostrar fragmento de código
Este método es bueno para cadenas de longitud pequeña, pero puede ser lento para texto más grande.
fuente
@CemKalyoncu: ¡Gracias por la excelente respuesta!
También lo adapté un poco para hacerlo más parecido al método Array.splice (y tomé en cuenta la nota de @Ates):
fuente
Array.splice
funcionalidad de tipo.Esto funciona de manera similar a
Array.splice
:fuente
Tu podrías intentar
fuente
Si desea reemplazar caracteres en una cadena, debe crear cadenas mutables. Estos son esencialmente matrices de caracteres. Podrías crear una fábrica:
Luego puede acceder a los caracteres y toda la matriz se convierte en cadena cuando se usa como cadena:
fuente
Generalizando la respuesta de Afanasii Kurakin, tenemos:
Expandamos y expliquemos tanto la expresión regular como la función de reemplazo:
La expresión regular
.
coincide exactamente con un carácter. Lag
hace coincidir con cada personaje en un bucle for. Lareplacer
función se llama dado el carácter original y el índice de dónde está ese carácter en la cadena. Hacemos unaif
declaración simple para determinar si vamos a volverorigChar
onewChar
.fuente
Puede extender el tipo de cadena para incluir el método de inserción:
Entonces puedes llamar a la función:
fuente
Hice una función que hace algo similar a lo que pides, comprueba si un carácter en cadena está en una matriz de caracteres no permitidos si lo reemplaza con ''
fuente
¡esto se puede lograr fácilmente con RegExp!
fuente
Aquí hay una versión que se me ocurrió si desea diseñar palabras o caracteres individuales en su índice en react / javascript.
Ejemplo de trabajo: https://codesandbox.io/s/ov7zxp9mjq
Y aquí hay otro método alternativo.
Y otro...
fuente
Sé que esto es antiguo, pero la solución no funciona para el índice negativo, así que le agrego un parche. espero que ayude a alguien
fuente
Digamos que desea reemplazar el
Kth
índice (índice basado en 0) con'Z'
. PodríasRegex
hacer esto.fuente
Puede usar la siguiente función para reemplazar
Character
oString
en una posición particular de una Cadena. Para reemplazar todos los siguientes casos de coincidencia, utilice laString.prototype.replaceAllMatches()
función.Prueba:
Salida:
fuente
Aquí está mi solución usando el operador ternario y de mapa. Más legible, mantenible y más fácil de entender si me preguntas.
Está más en es6 y las mejores prácticas.
fuente
Los métodos aquí son complicados. Lo haría de esta manera:
Esto es tan simple como se pone.
fuente