JS toLowerCase()不起作用

时间:2017-09-26 13:50:16

标签: javascript

我有这段代码:

//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()无效。我做错了什么?

4 个答案:

答案 0 :(得分:2)

需要2次更新

  1. str.toLowerCase()重新分配给str
  2. 将更新的array value重新分配回数组。
  3. 请注意,除非您重新分配值,否则原始值不会更改。因此,结果不受影响。

    //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"));

答案 1 :(得分:0)

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

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

修改

这是我自己的ES6单线版:

&#13;
&#13;
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
&#13;
&#13;
&#13;

说明:

{{1}}

答案 2 :(得分:0)

简短解决方案:

var titleCase = (str)=>str.toLowerCase().split(' ').map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(' ');

主叫:

titleCase('Potato potato potato');

按空格拆分字符串并将lambda映射到结果数组。 lambda出现了第一个字母并附加了其余部分。

正如评论中所指出的那样:

var titleCase = (str)=>str.toLowerCase().split(' ').reduce((currentString, word)=>currentString+(currentString ? ' ':'')+word.charAt(0).toUpperCase()+word.slice(1));

这也有效,只循环一次。

答案 3 :(得分:0)

你可以简单地做

Template.view.onCreated(function(){
    this.dynamicSlug = new ReactiveVar("");
    this.autorun(()=>{
        // When `myslug` changes, subscription will change dynamically.
        this.dynamicSlug.set(FlowRouter.getParam('myslug'));
        Meteor.subcribe('SingleSchool', this.dynamicSlug.get());
    });
});