Skip to content

Home

Pluralize a JavaScript string

Tasks involving language and localization are generally more complex than they seem at first glance. One common task is pluralizing strings based on a number. While seemingly easy at first, each language has its own rules for pluralization and special cases that need to be accounted for.

Check if string should be pluralized

Focusing on English, the rules are relatively simple: if the number is not 1, the word should be pluralized. We can write a simple function to decide whether to pluralize a word based on a number, using Math.abs(), so we can handle negative numbers as well.

const isPlural = num => Math.abs(num) !== 1;

isPlural(0); // false
isPlural(1); // false
isPlural(-1); // false
isPlural(2); // true
isPlural(-2); // true

Pluralize string based on a number

The plural form of most words is simply the singular form with an s added to the end. However, there are exceptions, such as person becoming people and radius becoming radii. For such cases, we can easily provide a custom plural form, via an optional argument.

const isPlural = num => Math.abs(num) !== 1;
const simplePlural = word => `${word}s`;
const pluralize = (num, word, plural = simplePlural) =>
  isPlural(num) ? plural(word) : word;

pluralize(0, 'apple'); // 'apples'
pluralize(1, 'apple'); // 'apple'
pluralize(2, 'apple'); // 'apples'
pluralize(2, 'person', word => 'people'); // 'people'

Pluralize strings using a dictionary

This works, but is a little cumbersome to use. We can improve it by using a dictionary to store the plural forms of words. This way, we can easily look up the plural form of a word based on the input number.

const isPlural = num => Math.abs(num) !== 1;
const simplePlural = word => `${word}s`;
const pluralizer =
  (dictionary = {}, plural = simplePlural) =>
  (num, word) =>
    isPlural(num) ? dictionary[word] || plural(word) : word;

const PLURALS = {
  person: 'people',
  radius: 'radii',
};

const autoPluralize = pluralizer(PLURALS);
autoPluralize(0, 'apple'); // 'apples'
autoPluralize(2, 'person'); // 'people'

More like this

Start typing a keyphrase to see matching snippets.