在大写字母前添加空格然后将它们转换为小写字符串

我正在尝试创建一个函数来限制空间,其中它接受“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");
输出:
'i lik eswimming' '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'))

以上是在大写字母前添加空格然后将它们转换为小写字符串的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>