Há muitas respostas aqui, e todas elas são baseadas em dois métodos:
- MÉTODO1: divida a string usando duas substrings e encha o caractere entre elas
- MÉTODO2: converte a cadeia de caracteres em matriz de caracteres, substitua um membro da matriz e junte-se a ela
Pessoalmente, eu usaria esses dois métodos em casos diferentes. Deixe-me explicar.
@FabioPhms: Seu método foi o que eu usei inicialmente e eu tinha medo de que ele seja ruim na string com muitos caracteres. No entanto, a pergunta é o que há em muitos personagens? Eu testei em 10 parágrafos "lorem ipsum" e demorou alguns milissegundos. Depois testei-o em cordas 10 vezes maiores - não havia realmente nenhuma grande diferença. Hum.
@vsync, @Cory Mawhorter: Seus comentários são inequívocos; no entanto, novamente, o que é uma string grande? Concordo que, para 32 ... 100kb, o desempenho deve ser melhor e deve-se usar a variante de substring para esta operação de substituição de caracteres.
Mas o que acontecerá se eu tiver que fazer algumas substituições?
Eu precisava realizar meus próprios testes para provar o que é mais rápido nesse caso. Digamos que tenhamos um algoritmo que manipulará uma cadeia relativamente curta que consiste em 1.000 caracteres. Esperamos que, em média, cada caractere dessa sequência seja substituído ~ 100 vezes. Portanto, o código para testar algo como isto é:
var str = "... {A LARGE STRING HERE} ...";
for(var i=0; i<100000; i++)
{
var n = '' + Math.floor(Math.random() * 10);
var p = Math.floor(Math.random() * 1000);
// replace character *n* on position *p*
}
Eu criei um violino para isso, e está aqui . Existem dois testes, TEST1 (substring) e TEST2 (conversão de matriz).
Resultados:
Parece que a conversão de array supera a substring em 2 ordens de magnitude! Então - o que diabos aconteceu aqui ???
O que realmente acontece é que todas as operações no TEST2 são feitas no próprio array, usando a expressão de atribuição like strarr2[p] = n
. A atribuição é realmente rápida em comparação com a substring em uma string grande, e é claro que ela vai ganhar.
Portanto, trata-se de escolher a ferramenta certa para o trabalho. Novamente.
str[0] = 'x'
não parece gerar nenhum erro, mas ainda não tem o efeito desejado!