Здесь много ответов, и все они основаны на двух методах:
- МЕТОД 1: разбить строку, используя две подстроки и вставить символ между ними
- МЕТОД 2: преобразовать строку в массив символов, заменить один элемент массива и присоединиться к нему
Лично я бы использовал эти два метода в разных случаях. Позволь мне объяснить.
@FabioPhms: твой метод был тем, который я использовал изначально, и я боялся, что он плох для строки с большим количеством символов. Тем не менее, вопрос в том, что много персонажей? Я проверил это на 10 параграфах "lorem ipsum", и это заняло несколько миллисекунд. Затем я проверил это на 10-кратной струне - не было большой разницы. Гектометр
@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 (преобразование массива).
Результаты:
- ТЕСТ 1: 195мс
- ТЕСТ 2: 6 мс
Кажется, преобразование массива превосходит подстроку на 2 порядка! Итак - что, черт возьми, здесь произошло ???
На самом деле происходит то, что все операции в TEST2 выполняются над самим массивом с использованием выражения присваивания, например strarr2[p] = n
. Назначение действительно быстрое по сравнению с подстрокой на большой строке, и ясно, что оно победит.
Итак, все дело в выборе правильного инструмента для работы. Снова.
str[0] = 'x'
, похоже, не выдает никаких ошибок, но не дает желаемого эффекта!