数组中的元素没有改变值

时间:2018-06-22 19:11:47

标签: javascript arrays string

我的函数旨在将每个单词的首字母大写,但是在for循环运行之后,数组未更改。我想念什么?

function capitalize(str) {
  var splitStr = str.split(' ');
  for (let i = 0; i < splitStr.length; i++) {
    var word = splitStr[i];
    word = word[0].toUpperCase() + word.slice(1);
  }
  return splitStr.join(' ');
}

console.log(capitalize('my test'));

6 个答案:

答案 0 :(得分:3)

只需将word =替换为splitStr[i],就可以完成

function capitalize(str) {
  var splitStr = str.split(' ');
   
  for (let i = 0; i < splitStr.length; i++) {
    var word = splitStr[i];
    splitStr[i] = word[0].toUpperCase() + word.slice(1);
  }
  return splitStr.join(' ');
}

console.log(capitalize("this is it"));

原因:因为您没有使用原始字符串splitStr更新它。 toUpperCase不会修改原始元素,但会返回更新后的值,因此您需要将其分配回该特定的字符串索引以进行修改。

答案 1 :(得分:2)

将值分配回数组本身

这是可行的解决方案-

function capitalize(str) {
  var splitStr = str.split(' ');
  for (let i = 0; i < splitStr.length; i++) {
    var word = splitStr[i];
    splitStr[i] = word[0].toUpperCase() + word.slice(1);
  }
  return splitStr.join(' ');
}

console.log(capitalize("stack over flow"));

答案 2 :(得分:1)

执行此操作

var word = splitStr[i];

您没有获得对索引的引用,因此当您更新word时,它不会更新数组的索引。

splitStr[i] = word[0].toUpperCase() + word.slice(1);

答案 3 :(得分:1)

您需要通过将索引i的数组设置为等于某个值(而不是相反)来更改数组的值。

javac.target

答案 4 :(得分:1)

您需要实际更改它,而不是参考每个单词。一种选择是使用 function capitalize(str) { var splitStr = str.split(' '); for (let i = 0; i < splitStr.length; i++) { var word = splitStr[i]; splitStr[i] = word[0].toUpperCase() + word.slice(1); } return splitStr.join(' '); } 重新分配:

map

答案 5 :(得分:0)

`var word = splitStr[i];
 word = word[0].toUpperCase() + word.slice(1);`

应该跟随修改原始字符串

`var word = splitStr[i];
 splitStr[i] = word[0].toUpperCase() + word.slice(1);`

我走得更远,并删除了中间变量word

function capitalize(str) {
  var splitStr = str.split(' ');
  for (let i = 0; i < splitStr.length; i++) {
    splitStr[i] = splitStr[i][0].toUpperCase() + splitStr[i].slice(1);
  }
  return splitStr.join(' ');
}

console.log(capitalize("Hello, i am here"));