DEV Community

Cover image for JS Coding Question #8: Capitalize All Words In A Sentence [Not So Easy]😓😣
Let's Code
Let's Code

Posted on • Updated on

JS Coding Question #8: Capitalize All Words In A Sentence [Not So Easy]😓😣

Interview Question #8:

Write a function that will capitalize all words in a sentence.🤔

If you need practice, try to solve this on your own. I have included 3️⃣ potential solutions below.

Note: There are many other potential solutions to this problem.

Feel free to bookmark 🔖 even if you don't need this for now. You may need to refresh/review down the road when it is time for you to look for a new role.

Codepen: If you want to play around and experiment with the code: https://codepen.io/angelo_jin/pen/xxrdBVE

Solution #1: Array Map (Recommended)

  • This is one solution I would go by if I am going to be asked in an interview. It pretty straight-forward approach and is legible. 🔥
function capitalize(str) {
    return str
        .split(' ')
        .map(word => word[0].toUpperCase() + word.slice(1)).join(' ');
}
Enter fullscreen mode Exit fullscreen mode

Solution #2: Array Reduce (Recommended)

  • Another solution that I like. Array reduce is used as intended where one value is returned as a result of every iteration. Pretty sexy 💃 approach just like array map above.
function capitalize(str) {
    return str
        .split(' ')
        .reduce((prev, current) => `${prev} ${current[0].toUpperCase() + current.slice(1)}`, '')
}
Enter fullscreen mode Exit fullscreen mode

Solution #3: for-of loop

  • Below is an alternative solution that can be used but it creates a variable to push results which array reduce solves easily. I see this as an OK option.
function capitalize(str) {
    const words = [];

    for (let word of str.split(' ')) {
        words.push(word[0].toUpperCase() + word.slice(1));
    }

    return words.join(' ');
}
Enter fullscreen mode Exit fullscreen mode

Happy coding and good luck if you are interviewing!

If you want to support me - Buy Me A Coffee

In case you like a video instead of bunch of code 👍😊

Discussion (4)

Collapse
sbaggott profile image
Sage Baggott

Love these JS coding questions!

A note on solution #2: instead of putting the whitespace between the prev and current props in the template string (Note: ⬜️ = whitespace so it's easier to see):

${prev}⬜️${current[0].toUpperCase() + current.slice(1)}, '')

...you should put the whitespace at the end of the template string:

${prev}${current[0].toUpperCase() + current.slice(1)}⬜️, '')

...that way you won't get an empty space before the first word.

Collapse
frontendengineer profile image
Let's Code Author

What is your solution of choice here? Please share if you have your own solution.

Collapse
lukaszlukasiewicz profile image
lukaszlukasiewicz

str.replace(/(^|\s)(.)/g,match => match.toUpperCase())

Collapse
frontendengineer profile image
Let's Code Author

that works beautifully! Thanks for the snippet.