javascript - 我正在编写一个函数,该函数接受一个字符串并返回一个字符串 camelCased,每个单词之间带有单词 ROD 而不是空格
问题描述
如何清理我的代码以不使用函数内部的函数?
function toRodCase(input) {
if(!input) {
return '';
}
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
function lowerCaseFirstLetter(string) {
return string.charAt(0).toLowerCase() + string.slice(1);
}
let words = input.split(' ');
for(let i = 0; i < words.length; i++){
if(i === 0){
words[i] = lowerCaseFirstLetter(words[i]);
}else{
words[i] = 'ROD' + capitalizeFirstLetter(words[i]);
}
}
return words.join('');
}
toRodCase("Hello there stealth warrior")
现在我在一个函数中有两个函数。我怎样才能减少这种情况或有更好的方法来做到这一点?
解决方案
考虑使用正则表达式。基于@christian-c-salvadó 对此处非常相似的用例的回答:Converting any string into camel case,您可以将函数缩短为以下内容:
function toRodCase(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
return index === 0 ? word.toLowerCase() : word.toUpperCase();
}).replace(/\s+/g, 'ROD');
}
这利用正则表达式首先进行必要的大写/小写更改,然后用您选择的分隔符替换每个空格。
您可以将其泛化为使用任何分隔符,如下所示:
function toSpacedCase(str, spacer) {
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
return index === 0 ? word.toLowerCase() : word.toUpperCase();
}).replace(/\s+/g, spacer);
}