Здесь много ответов, и все они основаны на двух методах:
- МЕТОД1: разбить строку, используя две подстроки, и вставить символ между ними
- МЕТОД 2: преобразовать строку в массив символов, заменить один элемент массива и присоединиться к нему
Лично я бы использовал эти два метода в разных случаях. Позвольте мне объяснить.
@ FabioPhms: Ваш метод был тем, который я использовал изначально, и я боялся, что он плох для строки с большим количеством символов. Тем не менее, вопрос в том, что много персонажей? Я проверил это на 10 параграфах "lorem ipsum", и это заняло несколько миллисекунд. Затем я проверил это на 10-кратной струне - не было большой разницы. Hm.
@ vsync, @Cory Mawhorter: Ваши комментарии однозначны; однако, опять же, что такое большая строка? Я согласен, что для 32 ... 100 КБ производительность должна быть лучше, и для этой операции замены символов следует использовать 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
. Назначение действительно быстрое по сравнению с подстрокой в большой строке, и ясно, что оно победит.
Итак, все дело в выборе правильного инструмента для работы. Опять же.