[英]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.