Ci sono molte risposte qui e tutte sono basate su due metodi:
- METODO 1: dividere la stringa usando due sottostringhe e riempire il carattere tra loro
- METODO2: converti la stringa in array di caratteri, sostituisci un membro dell'array e unisciti a esso
Personalmente, userei questi due metodi in diversi casi. Lasciatemi spiegare.
@FabioPhms: il tuo metodo era quello inizialmente usato e temevo che fosse un problema con la stringa con molti caratteri. Tuttavia, la domanda è: quanti personaggi ci sono? L'ho testato su 10 paragrafi "Lorem ipsum" e ci sono voluti alcuni millisecondi. Poi l'ho provato su una stringa 10 volte più grande - non c'era davvero nessuna grande differenza. Hm.
@vsync, @Cory Mawhorter: i tuoi commenti non sono ambigui; tuttavia, di nuovo, cos'è una stringa di grandi dimensioni? Concordo sul fatto che per 32 ... 100kb le prestazioni dovrebbero essere migliori e si dovrebbe usare la variante di sottostringa per questa operazione di sostituzione dei caratteri.
Ma cosa succederà se dovrò effettuare parecchie sostituzioni?
Avevo bisogno di eseguire i miei test per dimostrare cosa è più veloce in quel caso. Diciamo che abbiamo un algoritmo che manipolerà una stringa relativamente corta composta da 1000 caratteri. Ci aspettiamo che in media ogni carattere in quella stringa venga sostituito ~ 100 volte. Quindi, il codice per testare qualcosa del genere è:
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*
}
Ho creato un violino per questo, ed è qui . Esistono due test, TEST1 (sottostringa) e TEST2 (conversione array).
risultati:
Sembra che la conversione dell'array superi la sottostringa di 2 ordini di grandezza! Quindi - che diavolo è successo qui ???
Ciò che effettivamente accade è che tutte le operazioni in TEST2 vengono eseguite sull'array stesso, usando espressioni di assegnazione simili strarr2[p] = n
. L'assegnazione è molto rapida rispetto alla sottostringa su una stringa di grandi dimensioni ed è evidente che vincerà.
Quindi, si tratta solo di scegliere lo strumento giusto per il lavoro. Ancora.
str[0] = 'x'
non sembra lanciare errori, ma non ha l'effetto desiderato!