Как заменить символ в конкретном индексе в JavaScript?

У меня есть строка, допустим, Hello worldи мне нужно заменить символ в индексе 3. Как я могу заменить символ, указав индекс?

var str = "hello world";

Мне нужно что-то вроде

str.replaceAt(0,"h");

javascript,string,replace,character-replacement,

430

Ответов: 18


490 ов принято

В JavaScript строки неизменяемы , что означает, что лучше всего вы можете создать новую строку с измененным контентом и назначить переменную для указания на нее.

Вам нужно будет определить replaceAt()функцию самостоятельно:

String.prototype.replaceAt=function(index, replacement) {
    return this.substr(0, index) + replacement+ this.substr(index + replacement.length);
}

И используйте его вот так:

var hello="Hello World";
alert(hello.replaceAt(2, "!!")); //should display He!!o World

71

В replaceAtJavaScript нет функции. Вы можете использовать следующий код для замены любого символа в любой строке в указанной позиции:

function Rep() {
    var str = 'Hello World';
    str = setCharAt(str,4,'a');
    alert(str);
}

function setCharAt(str,index,chr) {
    if(index > str.length-1) return str;
    return str.substr(0,index) + chr + str.substr(index+1);
}
<button onclick="Rep();">click</button>


51

Вы не можете. Возьмите символы до и после позиции и введите в новую строку:

var s = "Hello world";
var index = 3;
s = s.substr(0, index) + 'x' + s.substr(index + 1);

29 ов

Здесь много ответов, и все они основаны на двух методах:

  • 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. Назначение действительно быстро по сравнению с подстрокой на большой строке, и ясно, что она собирается выиграть.

Итак, все дело в выборе правильного инструмента для работы. Снова.


27

Обычно работа с векторами наиболее эффективна для связи с String.

Я предлагаю следующую функцию:

String.prototype.replaceAt=function(index, char) {
    var a = this.split("");
    a[index] = char;
    return a.join("");
}

Запустите этот фрагмент:

String.prototype.replaceAt=function(index, char) {
    var a = this.split("");
    a[index] = char;
    return a.join("");
}

var str = "hello world";
str = str.replaceAt(3, "#");

document.write(str);

JavaScript, строка, заменить символ-замены,
Похожие вопросы