Заменить символ в индексе строки

Почему этот код не работает для меня ниже? Не могу ли я переназначить значение по определенному индексу в строке?

function replaceChar (str) {
  let i

  for (i = 0; i < str.length; i++) {
    if (str[i] == '-') {
      str[i] = ' '
    }
  }
  return str
}
2
0
9 039
3

Ответы 3

Строки неизменяемы в JavaScript. Вместо этого вам нужно создать строку новый:

str = str.substring(0, i) + ' ' + str.substring(i + 1);

Если вы делаете это часто, вы можете преобразовать строку в массив символов, произвести замену, а затем преобразовать массив обратно в строку. Вот пример ES2015 +:

function replaceChar(str) {
  return [...str].map(ch => ch === "-" ? " " : ch).join("");
}
console.log(replaceChar("testing-1-2-3"));

Весь ваш цикл можно заменить на replace метод:

str = str.replace(/-/g, " ");

Строки в Javascript являются неизменный - вы не можете изменять отдельные символы. Если вы хотите сделать что-то подобное, вам нужно сначала явно преобразовать строку в массив, внести изменения, а затем снова присоединить массив обратно к строке:

function replaceChar (str) {
  str = [...str];
  let i

  for (i = 0; i < str.length; i++) {
    if (str[i] == '-') {
      str[i] = ' '
    }
  }
  return str.join('');
}
console.log(replaceChar('foo-bar-baz'));

Вы можете использовать split() и join() вместе. Разделите строку по - и присоедините к массиву по <space>

str.split("-").join(" ");

Другие вопросы по теме