替换字符串索引处的字符

时间:2018-09-10 09:17:11

标签: javascript

为什么下面的代码对我不起作用?我不能在字符串的特定索引处重新分配值吗?

function replaceChar (str) {
  let i

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

3 个答案:

答案 0 :(得分:3)

字符串在JavaScript中是不可变的。您必须创建一个 new 字符串:

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 method代替:

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

答案 1 :(得分:2)

字符串在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'));

答案 2 :(得分:2)

您可以同时使用split()join()。用-分割字符串,然后用<space>

连接数组
str.split("-").join(" ");