Здесь много ответов, и все они основаны на двух методах:
- METHOD1: разделите строку с помощью двух подстрок и наполните символ между ними
- METHOD2: преобразовать строку в массив символов, заменить один элемент массива и присоединиться к нему
Лично я бы использовал эти два метода в разных случаях. Позволь мне объяснить.
@FabioPhms: Ваш метод был тем, который я изначально использовал, и я боялся, что это плохо для строки с большим количеством символов. Однако вопрос в том, что много персонажей? Я тестировал его на 10-дюймовых абзацах «lorem ipsum», и потребовалось несколько миллисекунд. Затем я тестировал его на 10-кратной строчке - не было большой разницы. Гектометр
@vsync, @Cory Mawhorter: ваши комментарии недвусмысленны; опять же, что такое большая строка? Я согласен, что для производительности 32 ... 100 кб лучше, и для этой операции замены символа следует использовать вариант подстроки.
Но что произойдет, если мне придется сделать немало замен?
Мне нужно было выполнить свои собственные тесты, чтобы доказать, что быстрее в этом случае. Предположим, у нас есть алгоритм, который будет манипулировать относительно короткой строкой, состоящей из 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 (преобразование массива).
Результаты:
- TEST1: 195 мс
- TEST2: 6 мс
Кажется, что преобразование массива превосходит подстроку на 2 порядка! Итак - что, черт возьми, произошло здесь?
Фактически происходит то, что все операции в TEST2 выполняются самим массивом, используя выражение присваивания типа strarr2[p] = n
. Назначение действительно быстро по сравнению с подстрокой на большой строке, и ясно, что она собирается выиграть.
Итак, все дело в выборе правильного инструмента для работы. Снова.