【问题标题】:i can't reassign an javascript string variable我无法重新分配 javascript 字符串变量
【发布时间】:2021-02-22 11:48:03
【问题描述】:

我有一个练习来编写一个函数,将一个字符串作为参数并返回一个字符串,其中每个单词的首字母大写。但它不起作用:(而且我不知道为什么。

 function titleCase(str) {
  var arr = str.split(" ")
      arr.forEach(e => 
      {
        let a = (e.charAt(0).toUpperCase() + e.slice(1))
        e = a
        console.log(e)
      })
      console.log(arr)
      return arr.join(" ")
}

console.log(titleCase("I'm a little tea pot"));

【问题讨论】:

  • forEach 不会更改数组。你需要map

标签: javascript arrays string assign


【解决方案1】:

toUppoerCase 不会就地更新。这意味着它不会更新源字符串。你可以用地图做这样的事情,

 function titleCase(str) {
  var arr = str.split(" ")
      let res = arr.map(e => 
      {
        let a = (e.charAt(0).toUpperCase() + e.slice(1))
        e = a
        console.log(e)
        return e;
      })
      console.log(res)
      return res.join(" ")
}

console.log(titleCase("I'm a little tea pot"));

【讨论】:

    【解决方案2】:

    您可以使用 map 代替 foreach 并返回 map 中的值。

    拆分后也可以直接运行map,不必使用e = a

    function titleCase(str) {
      var arr = str.split(" ").map(e => {
        e = (e.charAt(0).toUpperCase() + e.slice(1))
        return e;
      })
      return arr.join(" ")
    }
    
    console.log(titleCase("I'm a little tea pot"));

    或短版

    const titleCase = str => str.split(" ").map(e => e.charAt(0).toUpperCase() + e.slice(1)).join(" ");
    console.log(titleCase("I'm a little tea pot"));

    【讨论】:

      【解决方案3】:

      forEach 不会更改数组。你需要map

      function titleCase(str) {
        var arr = str.split(" ").map(e => 
            {
              let a = (e.charAt(0).toUpperCase() + e.slice(1))
              e = a
              console.log(e)
              return e
            })
            console.log(arr)
            return arr.join(" ")
      }
      
      console.log(titleCase("I'm a little tea pot"));

      【讨论】:

        【解决方案4】:

        我们必须使用 map() 而不是 forEach()。

        首先使用 split() 将句子转换为单词数组。

        使用 map() 将单词的第一个字符大写,单词的其余字符变为小写。

        最后使用 join() 将单词数组转换为字符串。

        function titleCase(str) {
          const words = str
            .split(" ")
            .map((word) => word[0].toUpperCase() + word.slice(1).toLowerCase());
          return words.join(" ");
        }
        
        console.log(titleCase("I'm a little tea pot"));

        【讨论】:

          【解决方案5】:

          点击相同功能的浏览器控制台。

              function titleCase(str) {
             var newStr = str.toLowerCase().split(' ');
             for (let i = 0; i < newStr.length; i++) {
                 newStr[i] = newStr[i].charAt(0).toUpperCase() + newStr[i].substring(1);     
             }
             return newStr.join(' '); 
          }
          console.log(titleCase("I'm a little tea pot"));

          输出:我是小茶壶

          编码愉快!

          【讨论】:

          • OP 想要一个大写的字符串,而不是全部大写。 “Capitalization ...正在写一个单词,它的第一个字母为大写字母(大写字母),其余字母为小写字母” Capitalization
          • 感谢 Thomas sablik。我已经改变了相同的逻辑。请看一看。
          • 正如您在输出中看到的那样,I'M 没有正确大写。 OP 用空格分割字符串并将第一个字母大写。您不应该更改 OP 代码的行为。解决问题就行了。
          • 完成更改。问题已解决。
          猜你喜欢
          • 2020-09-01
          • 1970-01-01
          • 2013-02-23
          • 2019-02-08
          • 2022-06-15
          • 2012-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多