簡體   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