开发者问题收集

JS toLowerCase() 不起作用

2017-09-26
4703

我有此代码:

//make first letter of each word capital
function titleCase(str) {
    /*
     *  1. change all letters to lower case
     *  2. split words
     *  3. set each 1st letter to Capital
     *  4. combine array back into string
     */
    arr = [];
    str.toLowerCase();

    arr = str.split(" ");

    for (var index = 0; index < arr.length; index++) {
        arr[index].charAt(0).toUpperCase();
    }

    str= arr.join(" ");
    return str;
}
console.log(titleCase("Potato potato potato"));

我不明白为什么 toLowerCase()toUpperCase() 不起作用。我做错了什么?

3个回答

需要进行 2 项更新

  1. str.toLowerCase() 重新分配给 str
  2. 将更新后的 数组值 重新分配回数组中。

请注意,除非您重新分配值,否则原始值不会改变。因此,结果不受影响。

//make first letter of each word capital
function titleCase(str) {
/*
1. change all letters to lower case
2. split words
3. set each 1st letter to Capital
4. combine array back into string
*/
    arr = [];
    str = str.toLowerCase(); // **** Problem 1 - Reassigning

    arr = str.split(" ");

    for (var index = 0; index < arr.length; index++) {
       // **** Problem 2 - Reassigning
       arr[index] = arr[index].charAt(0).toUpperCase() + arr[index].slice(1);
    }

    str= arr.join(" ");
    return str;
}
console.log(titleCase("Potato potato potato"));
Nikhil Aggarwal
2017-09-26

更改数组中的值后,需要重新分配(覆盖)。否则,数组保持不变。此外,您忘记将字符串的其余部分(arr[index].slice(1))添加到大写字母。

function titleCase(str) {
    let arr = [];
    str.toLowerCase();

    arr = str.split(" ");

    for (var index = 0; index < arr.length; index++) {
        arr[index] = arr[index].charAt(0).toUpperCase() + arr[index].slice(1); // <-- Changes
    }

    str= arr.join(" ");
    return str;
}
console.log(titleCase("Potato potato potato"));

编辑

这是我自己的 ES6 单行版本:

titleCase = str => str.trim().split(" ").map( word => word.charAt(0).toUpperCase() + word.slice(1) ).join(" ")
    
console.log(titleCase("Potato potato potato"));

解释:

titleCase = str => str
                   .trim() // Removes extra spaces
                   .split(" ")
                   .map( word =>
                        word.charAt(0).toUpperCase() + word.slice(1) // Uppercases 1st letter, adds the rest of the word, returns the whole
                   )
                   .join(" ") // Reforms a string
Jeremy Thille
2017-09-26

您可以简单地做

function convert(str){
    return str.split(' ').map(e => e.replace(/([A-Za-z])(\w+)/, (x, y, z) => y.toUpperCase()+z.toLowerCase())).join(' ');
}

console.log(convert('Potato potato pOtato'))
marvel308
2017-09-26