我正在尝试创建一个函数来限制空间,在该空间中它接受“iLikeSwimming”之类的输入,然后输出“我喜欢游泳”。
这是我的尝试:
function isUpper(str) {
return !/[a-z]/.test(str) && /[A-Z]/.test(str);
}
function capSpace(txt) {
var arr = Array.from(txt);
for (let i = 1; i < txt.length; i++){
if (isUpper(txt[i]) == true) {
arr.splice((i),0,' ')
}
}
return arr.join('').toString().toLowerCase();
}
这对于只有一个大写字母的字符串很好,但是,如果有多个大写字母就有点奇怪了。
示例输入和输出:
输入:
capSpace("iLikeSwimming"); capSpace("helloWorld");
输出:
'我喜欢游泳' ' Hello World '
如果有人能指出我的代码中的问题,我将不胜感激。我知道还有其他与此“类似”的问题,但我正在努力学习我的错误而不是仅仅复制,我无法理解任何其他问题。谢谢!
最佳答案
对于超过 1 个大写字母的字符串,它变得奇怪的原因是每次找到一个时,您都会添加一个空格,这使得以下索引增加 在一个单元中。
这是一个简单的解决方法:只需放置一个计数器 splitCount
来跟踪您添加了多少空格,并将其与索引 i
相加以更正索引。
function isUpper(str) {
return !/[a-z]/.test(str) && /[A-Z]/.test(str);
}
function capSpace(txt) {
var arr = Array.from(txt);
var splitCount = 0; // added a counter
for (let i = 1; i < txt.length; i++){
if (isUpper(txt[i]) === true) {
// sum it with i
arr.splice((i + splitCount),0,' ')
splitCount++; // increase every time you split
}
}
return arr.join('').toString().toLowerCase();
}
console.log(capSpace('iLikeSwimming'))
https://stackoverflow.com/questions/68946510/