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