Por ejemplo:
makeAbbr('central processing unit') === 'CPU'No pude encontrar mi error. Aprecio tu ayuda.
function makeAbbr(words) { let abbreviation = words[0]; for (let i = 1; i < words.length; i++) { if (words[i] === '') { abbreviation += words[i + 1]; } } return abbreviation.toUpperCase(); } console.log(makeAbbr('central processing unit'));Solo necesita cambiar las words[i] === '' en words[i] === ' ' . '' es una cadena vacía.
Otra opción es dividir la cadena pasada.
function makeAbbr(str) { // words is [ "central", "processing", "unit" ] let words = str.split(/\s+/); let abbreviation = ''; for (let i = 0; i < words.length; i++) { abbreviation += words[i][0]; } return abbreviation.toUpperCase(); }Esto generalmente funcionará en la abreviatura de palabras que usan el primer carácter de cada palabra separado por un espacio.
function makeAbbr(words) { // result abbreviation let abbreviation = ''; // store each word into an array using split by space let wordArray = words.split(' '); // iterate through the word array for (let i = 0; i < wordArray.length; i++) { // take the first character in each word into the result abbreviation abbreviation += wordArray[i][0]; } // return the abbreviation with all of them being upper case return abbreviation.toUpperCase(); } // test case console.log(makeAbbr('central processing unit'));Una solución de una línea:
function makeAbbr(words) { return words.split(' ').map(word => word[0].toUpperCase()).join(""); } console.log(makeAbbr('central processing unit')); Estamos convirtiendo la oración de string en una matriz de palabras separadas por un espacio ( .split(" ") ), luego mapeando o transformando cada palabra en la matriz a su primera letra, así como capitalizándola: .map(word => word[0].toUpperCase()) , luego une los elementos de la matriz en una cadena con "nada" "" como separador:
"central processing unit" -> ["central", "processing", "unit"] -> ["C", "P", "U"] -> "CPU"