Aquí está mi función. Se supone que debe devolver backgroundColor en lugar de backgroundcolor .
¿Cuál es mi problema?
function camelize(str) { let newStr = str.split('-'); newStr.forEach((item, index) => { if (index > 0) { item.toLowerCase(); item = item[0].toUpperCase() + item.slice(1); } }); newStr = newStr.join(''); return newStr; } console.log(camelize("background-color")); //'backgroundсolor' instead of 'backgroundColor'simplifiqué el código
const camelize = str => str .toLowerCase() .split('-').map((item, index) => index > 0 ? item[0].toUpperCase() + item.slice(1) : item) .join(''); console.log(camelize("background-color")); console.log(camelize("Background-color")); console.log(camelize("BACKGROUND-COLOR"));Más cerca de su antiguo código
function camelize(str) { const parts = str.toLowerCase().split('-'); let newStr = parts.map((item, index) => { if (index > 0) { item = item[0].toUpperCase() + item.slice(1); } return item }); newStr = newStr.join(''); return newStr; } console.log(camelize("background-color"));item es una variable local dentro de la función. Asignarlo no tiene efecto en newStr .
item.toLowerCase() devuelve una nueva cadena, no modifica la cadena en su lugar (las cadenas JS son inmutables). Debe volver a asignarlo a la variable para cambiarlo.
Use map() en lugar de forEach() para que devuelva una nueva matriz con los resultados.
function camelize(str) { let oldStr = str.split('-'); let newStr = oldStr.map((item, index) => { if (index > 0) { item = item.toLowerCase(); item = item[0].toUpperCase() + item.slice(1); } return item; }); return newStr.join(''); } console.log(camelize("background-color")); //'backgroundсolor' instead of 'backgroundColor'