试图将字符串数组中的第一个字符大写,为什么这不起作用?

Raf*_*del 9 javascript arrays string character capitalization

我是Javascript的初学者.我想写转换例如函数list-style-imagelistStyleImage.

我想出了一个功能,但它似乎无法正常工作.有人能指出我这里的问题吗?

var myStr = "list-style-image";

function camelize(str){
    var newStr = "";    
    var newArr = [];
    if(str.indexOf("-") != -1){
        newArr = str.split("-");
        for(var i = 1 ; i < newArr.length ; i++){
            newArr[i].charAt(0).toUpperCase();
        }       
        newStr = newArr.join("");
    }
    return newStr;
}

console.log(camelize(myStr));
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 16

您必须实际重新分配数组元素:

    for(var i = 1 ; i < newArr.length ; i++){
        newArr[i] = newArr[i].charAt(0).toUpperCase();
    }       
Run Code Online (Sandbox Code Playgroud)

"toUpperCase()"函数返回新字符串但不修改原始字符串.

您可能需要检查以确保newArr[i]首先是空字符串,以防您获得带有两个连续破折号的输入字符串.

编辑 - 注意到SO贡献者@lonesomeday正确地指出你还需要重新粘贴每个字符串的其余部分:

         newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1);
Run Code Online (Sandbox Code Playgroud)

  • 这给了`listSI`.你需要`+ newArr [i] .substr(1)` (2认同)

Roc*_*oC5 6

for循环中,您需要替换值newArr[i]而不是简单地评估它:

for(var i = 1 ; i < newArr.length ; i++){
    newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1);
}
Run Code Online (Sandbox Code Playgroud)


小智 6

这是我的ES6解决方案。这是一个示例,其中将星期几存储在数组中,并使用for... of循环将其大写。

const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

for (let day of days) {
    day = day.charAt(0).toUpperCase() + day.substr(1);
    console.log(day);
}
Run Code Online (Sandbox Code Playgroud)

这是文档的链接:for ...循环文档


小智 5

const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

days.map( a => a.charAt(0).toUpperCase() + a.substr(1) );
Run Code Online (Sandbox Code Playgroud)

  • 您应该考虑添加一些解释,并正确格式化您发布的代码。 (2认同)