为什么JS手写首字母大写函数与预期结果全等比较返回false
问题原因
titleCase函数循环拼接单词时,每处理完一个单词都会额外追加一个空格,最终返回的字符串末尾会多出一个多余的空格,和无末尾空格的目标字符串做全等比对时自然返回false。
例如处理str1 = "I'm a little tea pot"时,titleCase(str1)的实际返回值为"I'm A Little Tea Pot "(末尾带空格),和你用于比对的目标字符串"I'm A Little Tea Pot"不一致,所以全等判断不通过。
而titleCaseMap使用的join(" ")方法只会在数组的元素与元素之间插入空格,不会在最后一个元素的末尾额外追加空格,返回结果和预期完全一致,比对返回true。
修复方案
可以在返回前调用trimEnd()方法移除末尾多余的空格即可:
function titleCase(str) { let toArray = str.split(" ") let allCapitalize = "" for (let x of toArray) { allCapitalize += x.charAt(0).toUpperCase() + x.slice(1).toLowerCase() + " " } // 移除末尾多余空格 return allCapitalize.trimEnd() }
也可以调整拼接逻辑,只在非最后一个单词后面加空格,不过用trimEnd()是成本最低的修复方式。
内容的提问来源于stack exchange,提问作者JuanPasténCastillo
相关产品推荐
相关产品推荐

