代码之家  ›  专栏  ›  技术社区  ›  Travis M

数组中的元素不改变值

  •  0
  • Travis M  · 技术社区  · 8 年前

    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 回复  |  直到 8 年前
        1
  •  3
  •   Muhammad Usman    8 年前

    替换 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 不修改原始元素,但返回更新后的值,因此需要将其分配回要修改的特定字符串索引。

        2
  •  2
  •   Vivek    8 年前

    将返回值赋给数组本身

    这是有效的解决方案-

    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"));
        3
  •  1
  •   epascarello    8 年前

    var word = splitStr[i];
    

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

    splitStr[i] = word[0].toUpperCase() + word.slice(1);
    
        4
  •  1
  •   Unmitigated    8 年前

    您需要通过将索引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(' ');
     }
    
        5
  •  1
  •   zanmato    8 年前

    你不需要引用每个单词,而需要实际更改它。一个选项是使用 map

    let str = 'hi i am jack'
    
    str = arr.split(' ').map(word => `${word[0].toUpperCase()}${word.slice(1)}`).join(' ');
    
    console.log(str) // 'Hi I Am Jack'
    
        6
  •  0
  •   dhaker    8 年前
    `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"));