Допустим, у меня есть строка, Hello world
и мне нужно заменить символ в индексе 3. Как я могу заменить символ, указав индекс?
var str = "hello world";
Мне нужно что-то вроде
str.replaceAt(0,"h");
javascript
string
replace
character-replacement
Santhosh
источник
источник
str[0] = 'x'
, похоже, не выдает никаких ошибок, но не дает желаемого эффекта!"use strict"
активирован:Uncaught TypeError: Cannot assign to read only property '0' of string 'hello world'
(по крайней мере, в браузерах webkit)Ответы:
В JavaScript строки являются неизменяемыми , что означает, что лучшее, что вы можете сделать, - это создать новую строку с измененным содержимым и назначить переменную, указывающую на нее.
Вам нужно определить
replaceAt()
функцию самостоятельно:И используйте это так:
источник
В
replaceAt
JavaScript нет функции. Вы можете использовать следующий код для замены любого символа в любой строке в указанной позиции:источник
substr
считается унаследованной функцией, и ее следует избегать, когда это возможно .Ты не можешь Возьмите символы до и после позиции и добавьте новую строку:
источник
String.prototype.substring
сверхString.prototype.substr
.Здесь много ответов, и все они основаны на двух методах:
Лично я бы использовал эти два метода в разных случаях. Позволь мне объяснить.
@FabioPhms: твой метод был тем, который я использовал изначально, и я боялся, что он плох для строки с большим количеством символов. Тем не менее, вопрос в том, что много персонажей? Я проверил это на 10 параграфах "lorem ipsum", и это заняло несколько миллисекунд. Затем я проверил это на 10-кратной струне - не было большой разницы. Гектометр
@vsync, @Cory Mawhorter: Ваши комментарии однозначны; однако, опять же, что такое большая строка? Я согласен, что для 32 ... 100 КБ производительность должна быть лучше, и для этой операции замены символов следует использовать substring-вариант.
Но что произойдет, если мне придется сделать немало замен?
Мне нужно было провести свои собственные тесты, чтобы доказать, что быстрее в этом случае. Допустим, у нас есть алгоритм, который будет манипулировать относительно короткой строкой, состоящей из 1000 символов. Мы ожидаем, что в среднем каждый символ в этой строке будет заменен ~ 100 раз. Итак, код для тестирования примерно так:
Я создал для этого скрипку, и она здесь . Есть два теста, TEST1 (подстрока) и TEST2 (преобразование массива).
Результаты:
Кажется, преобразование массива превосходит подстроку на 2 порядка! Итак - что, черт возьми, здесь произошло ???
На самом деле происходит то, что все операции в TEST2 выполняются над самим массивом с использованием выражения присваивания, например
strarr2[p] = n
. Назначение действительно быстрое по сравнению с подстрокой на большой строке, и ясно, что оно победит.Итак, все дело в выборе правильного инструмента для работы. Снова.
источник
Работа с векторами обычно наиболее эффективна для связи со String.
Я предлагаю следующую функцию:
Запустите этот фрагмент:
источник
Array.prototype.replace = function(index, val) { this[index] = val; return this; };
'word'.split('').replace(1, '0').join(''); // returns 'w0rd'
В Javascript строки неизменны, поэтому вы должны сделать что-то вроде
Заменить символ в x в i с 'h'
источник
источник
split
иjoin
Однострочное использование String.replace с обратным вызовом (без поддержки смайликов):
Разъяснение:
источник
Показать фрагмент кода
Этот метод хорош для небольших строк, но может быть медленным для большого текста.
источник
@CemKalyoncu: Спасибо за отличный ответ!
Я также немного адаптировал его, чтобы сделать его более похожим на метод Array.splice (и учел примечание @Ates):
источник
Array.splice
функциональностью типа.Это работает аналогично
Array.splice
:источник
Вы могли бы попробовать
источник
Если вы хотите заменить символы в строке, вы должны создать изменяемые строки. По сути, это массивы символов. Вы можете создать фабрику:
Затем вы можете получить доступ к символам, и весь массив преобразуется в строку при использовании в качестве строки:
источник
Обобщая ответ Афанасия Куракина, мы имеем:
Давайте расширим и объясним как регулярное выражение, так и функцию заменителя:
Регулярное выражение
.
соответствует ровно одному символу.g
Делает матч каждый символ в цикле.replacer
Функция вызывается с учетом как оригинальный характер и индекс , где этот символ в строке. Мы делаем простоеif
заявление, чтобы определить, собираемся ли мы вернутьorigChar
илиnewChar
.источник
Вы можете расширить тип строки, включив метод inset:
Затем вы можете вызвать функцию:
источник
Я сделал функцию, которая делает что-то похожее на то, что вы спрашиваете, он проверяет, находится ли символ в строке в массиве недопустимых символов, если он заменяет его на ''
источник
это легко достижимо с RegExp!
источник
Вот версия, которую я придумал, если вы хотите стилизовать слова или отдельные символы в их индексе в реагировать / javascript.
Рабочий пример: https://codesandbox.io/s/ov7zxp9mjq
А вот еще один альтернативный метод
И другой...
источник
Я знаю, что это старо, но решение не работает для отрицательного индекса, поэтому я добавляю к нему патч. надеюсь, это поможет кому-то
источник
Допустим, вы хотите заменить
Kth
индекс (индекс на основе 0) на'Z'
. Вы можете использоватьRegex
для этого.источник
Вы можете использовать следующую функцию для замены
Character
илиString
в определенной позиции строки. Для замены всех следующих совпадений используйтеString.prototype.replaceAllMatches()
функцию.Тестовое задание:
Вывод:
источник
Вот мое решение с использованием троичного оператора и оператора карты. Более читаемый, понятный конец, легче понять, если вы спросите меня.
Это больше в es6 и лучшие практики.
источник
Методы здесь сложны. Я бы сделал это так:
Это так просто, как только может.
источник