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

我正在尝试创建一个函数来限制空间,在该空间中它接受“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/

相关文章:

python - 如何减少 lambda 表达式中辅助函数的使用?

ruby-on-rails - Rails 参数方法 : Why can it be accesse

java - 没有同步顺序的程序

node.js - express-session不设置cookie?

angular - 延迟加载模块时构建错误

indexing - 为什么索引 HashMap 不返回引用?

node.js - 如何在带有 Nest.js 的 Node 中分离客户端和服务器应用程序时获取用户

reactjs - RTK查询 |使来自另一个 API 服务的 API 服务的缓存无效

visual-studio-code - 如何在VSC终端创建文件?

reactjs - Material-UI:一个组件正在将 SwitchBase 不受控制的检查状态