Тут є багато відповідей, і всі вони базуються на двох методах:
- METHOD1: розділіть рядок за допомогою двох підрядків і вставте символ між ними
- METHOD2: перетворіть рядок у масив символів, замініть один елемент масиву та приєднайтеся до нього
Особисто я би використав ці два методи в різних випадках. Дозволь пояснити.
@FabioPhms: Ваш метод був таким, який я спочатку використовував, і я побоювався, що це погано в рядку з великою кількістю символів. Однак питання в чому багато персонажів? Я перевірив його на 10 абзацах "lorem ipsum", і це зайняло кілька мілісекунд. Тоді я тестував його на 10 разів більшу струну - різниці справді не було. Гм.
@vsync, @Cory Mawhorter: Ваші коментарі однозначні; однак, знову ж таки, що таке велика струна? Я погоджуюся, що для 32 ... 100kb продуктивність повинна бути кращою, і для цієї операції заміни символів слід використовувати варіант substring.
Але що буде, якщо мені доведеться зробити досить багато замін?
Мені потрібно було виконати власні тести, щоб довести, що швидше в такому випадку. Скажімо, у нас є алгоритм, який маніпулює відносно коротким рядком, який складається з 1000 символів. Ми очікуємо, що в середньому кожен символ у цьому рядку буде замінено ~ 100 разів. Отже, код для тестування чогось такого:
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*
}
Я створив для цього загадку, і вона тут . Є два тести, TEST1 (підрядка) та TEST2 (перетворення масиву).
Результати:
Здається, що перетворення масиву б'є підрядку на 2 порядки! Отже - що за чорт тут сталося ???
Що насправді відбувається, так це те, що всі операції в TEST2 виконуються на самому масиві, використовуючи вираз призначення, як strarr2[p] = n
. Присвоєння дійсно швидко порівняно з підрядкою на великій струні, і зрозуміло, що вона виграє.
Отже, справа у виборі правильного інструменту для роботи. Знову.
str[0] = 'x'
це, здається , не призводить до помилок, але не має бажаного ефекту!