Estoy muy cerca de completar este ejercicio. La instrucción es convertir str en esta nueva cadena Here Is My Handle Here Is My Spout .
Mi código regresa exactamente Here Is My Handle Here Is My Spout pero cuando traté de console.log(result.split(" ")) regresaba con esto [ '', 'Here', 'Is', 'My', 'Handle', 'Here', 'Is', 'My', 'Spout' ] .
Estoy tratando de deshacerme de la cadena vacía en el índice 0, pero parece que no puedo eliminarla. ¿También estoy pensando que estoy devolviendo las matrices de las words cuando las pasé en el result en lugar de una cadena?
function titleCase(str) { const words = str.toLowerCase().split(" "); let result = ""; for (let word of words) { let firstCap = word.replace(word[0], word[0].toUpperCase()); result = result + " " + firstCap; } console.log(result.split(" ")) return result; } console.log(titleCase("HERE IS MY HANDLE HERE IS MY SPOUT"));El problema es con la línea:
result = result + " " + firstCap; Cuando el result tiene el valor "" , no debe agregar un espacio sino una cadena vacía de la siguiente manera:
result = result + (result.length ? " " : "") + firstCap; function titleCase(str) { const words = str.toLowerCase().split(" "); let result = ""; for (let word of words) { let firstCap = word.replace(word[0], word[0].toUpperCase()); result = result + (result.length ? " " : "") + firstCap; } console.log(result.split(" ")) return result; } console.log(titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")); Un mejor enfoque sería usar Array#map() seguido de Array#join() .
function titleCase(str) { const words = str.toLowerCase().split(" "); return words.map(word => word.replace(word[0], word[0].toUpperCase())).join(" "); } console.log(titleCase("HERE IS MY HANDLE HERE IS MY SPOUT"));