Tell us what’s happening:
I am getting the desired output , but unable to clear the challenge, I know its completely different than expected solutions and is much longer because I have not used those advanced functions and just basic conditionals , but not sure why it does not satisfy the requirement.
Your code so far
function titleCase(str) {
let sp = str.split(" ")
let p=[];
let p1=[];
// using for loop to convert all elements in an array to lower case and split them individually and store them in array p.
for (let i = 0 ; i < sp.length; i ++){
p=sp[i].toLowerCase().split("");
// using for loop to convert first letter of the individual element to upper case and push them into an array p1.
for(let j=0;j<p.length;j++){
if ((j ==0) && (j == (p.length)-1) ){
p1.push(p[j].toUpperCase()+ " ")
}
else if ( j== p.length-1){
p1.push(p[j]+ " ")
}
else if (j == 0){
p1.push(p[j].toUpperCase())
}
else p1.push(p[j])
}
}
return p1.join("")
}
console.log(titleCase("I'm A Little Tea Pot"));
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36.
As ieahleen mentioned, it appears you’re not calling the trim function before returning the final string value.
In case you want to review a solution that does not require for-loops and uses the functions you mentioned in your question:
function titleCase(str) {
// Call toLowerCase() on the string (str) argument, so you only do this once, instead of inside the loop
// split() the sentence into an array of words
// then use the map to iterate over the array and transform each word
return str.toLowerCase().split(" ").map(word=>{
// As we map over each word in the sentence, create an array from the word
// Use Array destructing to extract the first letter
// If the word is 'little' Array.from(word) will produce [l,i,t,t,l,e]
// firstLetter = "l" and ...remainingLettersArray = [i,t,t,l,e]
const [firstLetter, ...remainingLettersArray] = Array.from(word);
// Now we'll transform firstLetter to upper-case and call join() on the [i,t,t,l,e] array.
// Finally, return "Little" to the map function call.
return firstLetter.toUpperCase() + remainingLettersArray.join("");
}).join(" ");
// When the map function completes for each item in the sentence you will have an array that looks like
// ["I'm", "A", "Little", "Tea", "Pot"]
// So, make sure to call join() (above) on the result array to produce the string in title case
}
Thank you so much about your explanation and suggestion to use trim method.I was able to understand the map function better and spread operator as well. Thank you so much for detailed comments. Cheers!