JavaScript 中的打破驼峰式大小写函数

问题描述 投票:0回答:4

我一直在尝试用 JavaScript 解决这个 codewars 问题:

“完成解决方案,以便该函数将使用单词之间的空格来分解驼峰式大小写。示例:”

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

javascript arrays camelcasing
4个回答
6
投票

第一次插入

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]
    拉丁字母中的大写字母。
  • $&
    反向引用匹配的字母,用于替换。
  • g
    全局标志,因此所有匹配项都会被替换。

1
投票

这可能是一个带有简单循环和一些 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;
}

1
投票

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


0
投票

我想出了这个:

function solution(string) {
  let str = "";
  for (let i = 0; i < string.length; i++) {
    str += /[A-Z]/.test(string[i]) ? ` ${string[i]}` : `${string[i]}`;
  }
  return str;
}
© www.soinside.com 2019 - 2024. All rights reserved.