javascript - 我的代码有什么问题吗?每个单词的第一个字母应大写

标签 javascript

function titleCase(str) {
  var str1 = str.match(/\S+\s*/g);
  var str2;
  for(var i = 0; i < str1.length; i++){
    str2 = str1[i].toLowerCase().replace(str1[i].charAt(0), str1[i].charAt(0).toUpperCase());        
  }
  return str2.join(' '); 
}

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

我的代码有什么问题吗? str2.join 不是函数

最佳答案

最简单的方法是在每个空格上分割字符串,然后将数组中每个元素的第一个字母设置为该字母的大写版本,然后将其连接回来。

您所做的是将结果的值分配给 str2,具有字符串类型而不是数组,这就是 join 不适合您的原因。

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

一个稍微不同的变体,有一些 ES6 的青睐:

const titleCase = str => {
    const result = [];
    for (const word of str.split(' ')) {
        result.push(word[0].toUpperCase() + word.slice(1));
    }
    return result.join(' ');
};

如果您想确保制表符、换行符等空格字符正常工作,您可以使用正则表达式进行拆分或第一步将所有空白字符替换为空格,例如:

const words = str.replace(/\s/g, ' ').split(' ').filter(word => word !== '');

关于javascript - 我的代码有什么问题吗?每个单词的第一个字母应大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48637729/

相关文章:

javascript - 如何仅在数组javascript中使用 "forEach"函数列出项目

javascript - 将全局变量的值赋给对象

javascript - 为什么我的代码在IE11中不起作用

javascript - 保存 Javascript 代码以供以后引用的方法

javascript - 如何在清除输入字段时触发 JavaScript 事件?

javascript - ng-click 在模板中只工作一次,但在返回页面后停止工作

javascript - 检查图像是否存在且没有错误消息

javascript - 创建一个通用方法来显示相应项目的附件名称

javascript - WebGL readPixels 返回翻转的 y 轴

javascript - 停用 JavaScript 页面级事件处理程序