Estoy tratando de poner en mayúscula el primer carácter de cada palabra y unir todas las palabras en una sola cadena. Me las arreglé para poner en mayúscula el primer carácter de cada palabra, pero parece que no puedo hacer que .join() funcione en el resultado final
function generateHashtag (str) { let split = str.split(' ') for(let i = 0; i < split.length; i++){ let finalResult = split[i].charAt(0).toUpperCase() + split[i].substring(1) console.log(finalResult.join('')) } } console.log(generateHashtag('Hello my name is')) should return ('HelloMyNameIs')Lograr esto por split es posible. primero cree una matriz de cadenas divididas (por el delimitador ' ') y luego recorra la matriz y escriba en mayúscula el primer carácter usando el método toUpperCase y concatene el resto de la cadena sin la primera letra usando slice
function generateHashtag(str) { let split = str.split(' '); for (let i = 0; i < split.length; i++) { split[i] = split[i].charAt(0).toUpperCase() + split[i].slice(1); } return split.join(''); } console.log(generateHashtag('Hello my name is')); Más información sobre split : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split
puede hacer split[i] = split[i].charAt(0).toUpperCase() + split[i].substring(1) en el bucle y luego fuera del bucle hacer split.join('')
Básicamente, está reemplazando cada palabra ( split[i] ) con una palabra en mayúscula. Luego, al final, une las palabras.
No necesita usar join en absoluto, simplemente declare e inicialice finalResult fuera del bucle y concatene cada palabra dentro del bucle:
function generateHashtag(str) { const split = str.split(' '); // Array<String> let finalResult = ''; // String for(let i = 0; i < split.length; i++) { const titleCased = split[i].charAt(0).toUpperCase() + split[i].substring(1); finalResult += titleCased; } return finalResult; } console.log(generateHashtag('Hello my name is'));map y reduce . Vea abajo.toLocaleUpperCase en lugar de toUpperCase y uso [0] por brevedad.substring(1) para cadenas de un solo carácter, simplemente devuelve '' . function generateHashtag(str) { return ( str .split(' ') .map( word => word[0].toLocaleUpperCase() + word.substring(1).toLocaleLowerCase() ) .reduce( ( word, concat ) => concat + word, "" ) ); }join() todavía se puede usar en lugar de reduce (y de todos modos tendrá una implementación optimizada dentro del motor JS):map a una función con nombre toTitleCase . function generateHashtag(str) { const toTitleCase( word ) => word[0].toLocaleUpperCase() + word.substring(1).toLocaleLowerCase(); return ( str .split(' ') .map( word => toTitleCase( word ) ) // or just `.map( toTitleCase )` .join() ); } La declaración de return tiene paréntesis para evitar la inserción automática no deseada de punto y coma que, de lo contrario, rompería la función.