繁体   English   中英

断骆驼案例 function in JavaScript

[英]Break Camel Case function in JavaScript

我一直试图在 JavaScript 中解决这个 codewars 问题一段时间:

“完成解决方案,以便 function 将打破驼峰式外壳,在单词之间使用空格。示例:”

"camelCasing"  =>  "camel Casing"

"identifier"   =>  "identifier"

""             =>  ""

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

 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'));

第一次插入newStr将在正确的位置,但在插入空格之后,在newStr中跟随它的字母将处于增加的索引处。 这意味着当在splitStr中的i处找到下一个大写字母时(未更改),插入newStr确实更改了)实际上应该在i+1处。

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

 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'));

然而,使用正则表达式更容易解决此类问题:

 function solution(string) { return string.replace(/[AZ]/g, " $&"); } console.log('camelCasing: ', solution('camelCasing')); console.log('camelCasingTest: ', solution('camelCasingTest'));

正则表达式的解释:

  • [AZ]的大写字母。
  • $&反向引用匹配的字母,用于替换。
  • g全局标志,因此所有匹配项都被替换。

这可能是一个带有简单循环和一些 if 条件的解决方案

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;
}

 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'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM