我在JavaScript中尝试解决这个代码战争问题已经有一段时间了:
“完成解决方案,这样函数就会使用单词之间的空格,将骆驼外壳断裂。例如:”
"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'));
发布于 2022-09-22 20:32:07
第一个插入到newStr中的位置将是正确的,但是在插入空格之后,newStr中它后面的字母将位于一个增加的索引处。这意味着,当在i的splitStr中找到下一个大写(没有变化)时,插入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(/[A-Z]/g, " $&");
}
console.log('camelCasing: ', solution('camelCasing'));
console.log('camelCasingTest: ', solution('camelCasingTest'));
对正则表达式的解释:
[A-Z]从拉丁文alphabet.$&反向引用到匹配字母的大写字母,用于replacement.g全局标志,因此所有匹配项都被替换。发布于 2022-09-22 20:36:32
这里可以有一个简单的循环和一些条件的解决方案
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;
}发布于 2022-09-22 20:42:58
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'));
https://stackoverflow.com/questions/73820261
复制相似问题