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

Let's Code @frontendengineer

About: A fan of technology/innovation, software engineer, and a father.

Joined:
May 6, 2019

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

Publish Date: Sep 14 '21
14 5

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 👍😊

Comments 5 total

  • Let's Code
    Let's CodeSep 14, 2021

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

    • lukaszlukasiewicz
      lukaszlukasiewiczSep 14, 2021

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

      • Let's Code
        Let's CodeSep 15, 2021

        that works beautifully! Thanks for the snippet.

  • Sage Baggott
    Sage BaggottFeb 8, 2022

    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.

  • neillindberg
    neillindbergMar 7, 2023

    This does the job, no slicing or anything needed.
    const capitalize = (sentance) => sentance.toUpperCase();

Add comment