我有这段代码:
//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()
无效。我做错了什么?
答案 0 :(得分:2)
需要2次更新
str.toLowerCase()
重新分配给str
array value
重新分配回数组。请注意,除非您重新分配值,否则原始值不会更改。因此,结果不受影响。
//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))添加到大写字母。
titleCase = str => str.trim().split(" ").map( word => word.charAt(0).toUpperCase() + word.slice(1) ).join(" ")
console.log(titleCase("Potato potato potato"));
&#13;
修改强>
这是我自己的ES6单线版:
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;
说明:
{{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());
});
});