标题大小写一个句子 - 哪个解决方案更好,为什么
Title case a sentence - Which solution is better and why?
我是编程新手。我以两种不同的方式编写了一个解决方案,但想知道什么被认为是更好的解决方案,以及为什么。
此外,就性能而言,为什么会被认为更好?
解决方案 1:
function titleCase(str) {
str = str.toLowerCase();
str = str.split("");
str[0] = str[0].toUpperCase();
for(i = 1; i<str.length; i++){
if(str[i+1] == " "){
str[i+2] = str[i+2].toUpperCase();
}
}
str = str.join("");
return str;
}
解决方案 2:
function titleCase(str) {
str = str.toLowerCase();
str = str.split(" ");
str = str.map(function(val){
val = val.charAt(0).toUpperCase() + val.slice(1);
return val;
});
str = str.join(" ");
return str;
}
哪种解决方案最好?
您的第二个解决方案是最好的,但通过将方法调用链接到str
并删除map
中不必要的val
重新分配可能会更好:
function titleCase(str) {
return str
.toLowerCase()
.split(" ")
.map(function (val) {
return val.charAt(0).toUpperCase() + val.slice(1);
})
.join(" ");
}
或者使用 ES6,我们可以使用箭头功能减小map
块的大小:
function titleCase(str) {
return str
.toLowerCase()
.split(" ")
.map((val) => val.charAt(0).toUpperCase() + val.slice(1))
.join(" ");
}
我想说的是,第二种解决方案最好的最明显原因是它更容易理解。通过使用像map
这样的命名方法,从一开始就很清楚正在执行哪种操作。查看 for 循环是否正在映射值并不清楚。
__
哪个性能最好?
我建议您使用大型数据集测试每个数据集。我怀疑您会发现每种方法之间实际上几乎没有区别,并且由于需要较少的函数调用,第一种方法的执行时间可以忽略不计。
第二个要好得多,因为它可以立即清楚发生了什么,而无需弄清楚循环构造有什么副作用。也可以说它更实用。
它也可以缩短为一个简单的链,没有那么多变量赋值,这使得它更容易理解:
function titleCase(str) {
return str.toLowerCase()
.split(" ")
.map(function(val) {
return val.charAt(0).toUpperCase() + val.slice(1);
})
.join(" ");
}
第一个中更复杂的循环结构也是两个错误的原因:
- 它不会以空格开头的标题大小写字符串
- 它抛出以空格1 结尾的字符串
当从1
循环到length-1
时,你应该使用str[i-1] == " "
和str[i] = …
。
另请注意,将两种不同的类型分配给同一变量通常被认为是一种不好的做法。处理字符串和字符数组时,应为它们使用两个不同的变量,而不是对两者str
。
1:诚然,如果您使用 val[0].toUpperCase()
而不是 .charAt(0)
,第二个函数也会发生同样的情况(对于超出范围的索引,这将产生空字符串而不是 undefined
(
我喜欢我的外观,因为它更容易阅读,它使用 lambda 函数,我有一个厚颜无耻的字符串数组访问权限,仅此而已:
function titleCase(str) {
return str
.toLowerCase()
.split(" ")
.map(word => word[0].toUpperCase() + word.slice(1))
.join(" ")
}
当然,单词边界是一个问题。
- 更好的解决方案HTML元素幻灯片从右侧CSS转换
- 将数据加载到地图上的更好解决方案
- AngularJS中的动态表单验证 - 是否有更好的解决方案/方法
- 使用Jquery处理大量点击事件的更好解决方案
- 将对象完全转换为键和值的数组:更好的解决方案
- 比“类似回调的行为”更好的解决方案
- 如何为此 jquery 代码使用函数参数,或者是否有更好的解决方案
- 有没有更好的解决方案
- 通过ssl请求传递凭据是不安全的,什么'是更好的(KISS)解决方案
- 在数组中查找单元格的更好解决方案
- 改进这个自定义函数addClassIfVarDefined()或共享更好的解决方案
- 卸载/重新加载javascript或用于大量ajax内容的更好的解决方案
- 需要一个更好的解决方案来从JavaScript文件附加HTML
- 标题大小写一个句子 - 哪个解决方案更好,为什么
- Regex从URL中提取匹配的字符串(有效,更好的解决方案?)
- 设计一个比使用AJAX获得整个HTML文档更好的解决方案
- 隐藏和显示:之前通过Jquery或更好的解决方案
- JavaScript:比删除更好的解决方案
- 哪种解决方案更适合通过“;这个“;javascript事件处理程序的参数
- 这个脚本更好(更短)的解决方案