将kebab-case 转换为camelCase - Javascript

Rob*_*yan 15 javascript arrays string camelcasing

假设我有一个函数可以转换kebab-casecamelCase

camelize("my-kebab-string") == 'myKebabString';
Run Code Online (Sandbox Code Playgroud)

我快到了,但我的代码也输出大写的第一个字母:

function camelize(str){
  let arr = str.split('-');
  let capital = arr.map(item=> item.charAt(0).toUpperCase() + item.slice(1).toLowerCase());
  let capitalString = capital.join("");

  console.log(capitalString);
}

camelize("my-kebab-string");
Run Code Online (Sandbox Code Playgroud)

小智 31

您也可以尝试正则表达式。

camelize = s => s.replace(/-./g, x=>x.toUpperCase()[1])
Run Code Online (Sandbox Code Playgroud)

仅查找后跟任何字符的连字符,并将其大写并将连字符+字符替换为大写字符。

  • 天才,但我会选择 `x=>x[1].toUpperCase()` (10认同)

bri*_*eje 13

为了保留您现有的代码,我刚刚添加了对索引的检查,item如果 item 为 0(falsy),该索引将返回而不是转换后的项目,因为问题只是您也将第一个项目大写,而你不应该。

简而言之,内联表达式变为: (item, index) => index ? item.charAt(0).toUpperCase() + item.slice(1).toLowerCase() : item,因为:

  • 如果 index 不是假的(因此,如果在您的上下文中 index > 0),则返回大写的字符串。
  • 否则,返回当前项。

当然,这可能更简洁,也可能是单行,但我想尽可能接近您的代码,以便您了解错误所在:

function camelize(str){
  let arr = str.split('-');
  let capital = arr.map((item, index) => index ? item.charAt(0).toUpperCase() + item.slice(1).toLowerCase() : item.toLowerCase());
  // ^-- change here.
  let capitalString = capital.join("");

  console.log(capitalString);
}

camelize("my-kebab-string");
Run Code Online (Sandbox Code Playgroud)

作为旁注,您可以在这里找到一个潜在的更清晰的答案:将任何字符串转换为驼峰式大小写


Ben*_*67b 5

对于lodash用户:

_.camelCase('my-kebab-string') => 'myKebabString'
Run Code Online (Sandbox Code Playgroud)