首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中破坏骆驼箱函数

在JavaScript中破坏骆驼箱函数
EN

Stack Overflow用户
提问于 2022-09-22 20:21:37
回答 3查看 283关注 0票数 0

我在JavaScript中尝试解决这个代码战争问题已经有一段时间了:

“完成解决方案,这样函数就会使用单词之间的空格,将骆驼外壳断裂。例如:”

代码语言:javascript
复制
"camelCasing"  =>  "camel Casing"

"identifier"   =>  "identifier"

""             =>  ""

我几乎一直都有,但出于某种原因,我的代码选择了错误的空格来添加空白。我希望有人能告诉我我做错了什么。

代码语言:javascript
复制
function solution(string) {
  let splitStr = string.split("");
  let newStr = string.split("");
  let capStr = string.toUpperCase().split("");
  for (i = 0; i < splitStr.length; i++) {
    if (splitStr[i] === capStr[i]) {
      newStr.splice(i, 0, ' ');
    }
  }
  return newStr.join("");
}

console.log('camelCasing: ', solution('camelCasing'));
console.log('camelCasingTest: ', solution('camelCasingTest'));

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-09-22 20:32:07

第一个插入到newStr中的位置将是正确的,但是在插入空格之后,newStr中它后面的字母将位于一个增加的索引处。这意味着,当在isplitStr中找到下一个大写(没有变化)时,插入newStr (确实发生了变化)实际上应该位于i+1

一个解决方案是让您的循环从头到尾迭代:

代码语言:javascript
复制
function solution(string) {
  let splitStr = string.split("");
  let newStr = string.split("");
  let capStr = string.toUpperCase().split("");
  for (i = splitStr.length - 1; i >= 0; i--) {
    if (splitStr[i] === capStr[i]) {
      newStr.splice(i, 0, ' ');
    }
  }
  return newStr.join("");
}

console.log('camelCasing: ', solution('camelCasing'));
console.log('camelCasingTest: ', solution('camelCasingTest'));

然而,使用正则表达式解决这类问题要容易得多:

代码语言:javascript
复制
function solution(string) {
  return string.replace(/[A-Z]/g, " $&");
}

console.log('camelCasing: ', solution('camelCasing'));
console.log('camelCasingTest: ', solution('camelCasingTest'));

对正则表达式的解释:

  • [A-Z]从拉丁文alphabet.
  • $&反向引用到匹配字母的大写字母,用于replacement.
  • g全局标志,因此所有匹配项都被替换。
票数 6
EN

Stack Overflow用户

发布于 2022-09-22 20:36:32

这里可以有一个简单的循环和一些条件的解决方案

代码语言:javascript
复制
const breakCamelCase = (word) => {
  let result = "";
  // loop on letter
  for (let letter of word) {
    // if letter is uppercase and not the first letter of the word add a space followed by the letter
    if (letter == letter.toUpperCase() && result) {
      result += ` ${letter}`;
    } else { // else just add the letter
      result += letter;
    }
  }
  return result;
}
票数 1
EN

Stack Overflow用户

发布于 2022-09-22 20:42:58

代码语言:javascript
复制
function solution(string) {
  let splitStr = string.split("");
  let newStr = "";
  splitStr.forEach(e =>{
      if(e === e.toUpperCase()) newStr +=" "+e;
      else newStr += e;
  });
  return newStr;
}

console.log(solution('camelCasing'));//success = "camel Casing"
console.log(solution('camelCasingTest'));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73820261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档