For example:
makeAbbr('central processing unit') === 'CPU'
I could not find my mistake. I appreciate your help.
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'));
You just need to change the words[i] === '' into words[i] === ' '. '' is an empty string.
Another option is splitting the passed string.
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();
}
This will generally work on abbreviation for words that use the first character of each words separated by a space.
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'));
A one liner solution:
function makeAbbr(words) {
return words.split(' ').map(word => word[0].toUpperCase()).join("");
}
console.log(makeAbbr('central processing unit'));
We are converting the string sentence to an array of words separated by a space (.split(" ")), then mapping or transforming every word in the array to its first letter, as well as capitalizing it: .map(word => word[0].toUpperCase()), then joining the array elements into a string with a "nothing" "" as a separator:
"central processing unit" -> ["central", "processing", "unit"] -> ["C", "P", "U"] -> "CPU"