Snippet

inflect()

edit

Often nouns need slight changes depending on the quantity of that noun. Example: One person, several people. I call these differences “inflections”. The inflect function below is a little helper function I use to help me apply inflections in my application.

const inflect =
  (singular, plural = `${singular}s`) =>
  quantity =>
    Math.abs(quantity) === 1 ? singular : plural

inflect is a higher order function, meaning it’s a function that returns a function. If you need some info on higher order functions, check out my post on them and the post on currying.

This solution makes use of default parameters for the plural argument. If adding an “s” is all you need to make a plural, then you don’t need to provide it. Like this:

const inflectPost = inflect('post')

console.log(inflectPost(1)) // 'post'
console.log(inflectPost(2)) // 'posts'

But often plurals have oddities (like “person” and “people”), so you can supply a plural argument when you need it.

const inflectMouse = inflect('mouse', 'mice')
const inflectKnife = inflect('knife', 'knives')
// etc

Now, as helpful as this is, it is not a proper solution should you need internationalization. Treat this is a helper function for those instances this can support.


Liked the post?
Give the author a dopamine boost with a few "beard strokes". Click the beard up to 50 times to show your appreciation.

Kyle Shevlin's face, which is mostly a beard with eyes

Kyle Shevlin is the founder & lead software engineer of Agathist, a software development firm with a mission to build good software with good people.

Logo for Array.reduce()
Array.reduce()
Check out my courses!
If you enjoy my posts, you might enjoy my courses, too. Click the button to view the course or go to Courses for more information.
Sign up for my newsletter
Let's chat some more about TypeScript, React, and frontend web development. Unsubscribe at any time.