Convert kebab-case to camelCase - Javascript

守給你的承諾、 提交于 2020-08-19 12:15:10

问题


Say I have a function that transforms kebab-case to camelCase:

camelize("my-kebab-string") == 'myKebabString';

I'm almost there, but my code outputs the first letter with uppercase too:

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

回答1:


To keep your existing code, I've just added a check on the index that will return item instead of the transformed item if item is 0 (falsy), since the problem is just that you are upper-casing the first item as well, while you shouldn't.

In a nutshell, the inline expression becomes: (item, index) => index ? item.charAt(0).toUpperCase() + item.slice(1).toLowerCase() : item, because:

  • If index is not falsy (so, if index is > 0 in your context), the capitalized string is returned.
  • Otherwise, the current item is returned.

Of course, this could be cleaner and likely single line, but I wanted to stay as close as possible to your code so that you could understand what was wrong:

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

  console.log(capitalString);
}

camelize("my-kebab-string");

As a side note, you could've found a potential cleaner answer here: Converting any string into camel case




回答2:


You can also try regex.

camelize = s => s.replace(/-./g, x=>x.toUpperCase()[1])

Looks only for hyphen followed by any character, and capitalises it and replaces the hyphen+character with the capitalised character.




回答3:


The first method is to just transform to lower case the first entry of your capital array, like this:

capital[0] = capital[0].toLowerCase();

Another method, which I think to be more efficient, is to pass another parameter to the map callback, which is the index. Take a look at this for further reading: https://www.w3schools.com/jsref/jsref_map.asp

So you transform to upper case only if (index > 0). Like this:

let capital = arr.map((item, index) => index ? item.charAt(0).toUpperCase() + item.slice(1).toLowerCase() : item);



回答4:


For lodash users:

_.camelCase('my-kebab-string') => 'myKebabString'


来源:https://stackoverflow.com/questions/57556471/convert-kebab-case-to-camelcase-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!