<aside> 💡 本文记录于2023年9月19日,因为为了学习如何做好独立开发,所以之前转开发做了两个月的前端。本次将这部分笔记同步到公众号上。本文仅适合前端新手阅读。

</aside>

背景

今天接到一个bug,当页面的数据为0的时候,字段展示了复数,比如如下:

There are 0 services in this vendor

所以要针对一些数据的字段做复数化处理,当数据为0/1的时候,就不展示“s”,超过1展示”s”

实现方案选择

最简单的想法是,我直接封装一个方法,用if/else来判断一下

export const resultWord = (resultTotal: number) => {
  if (resultTotal === 0 || resultTotal === 1) {
    return '';
  } else {
    return 's';
  }
};

但是这个方案的缺点是,英文的复数有很多种情况,例如有的单词的复数是”es的形式”

i18next实现复数化

然后我开始找三方库来解决这个问题,最初是搜到了掘金上的这篇文章:

如何在ReactJS中建立复数化(附代码示例) - 掘金

用i18next来实现复数化

但是文章里的配置对我的使用场景来说,有一些复杂,因为我不需要做国际化的复数化,只针对英文的复数化

pluralize实现复数化

GitHub - plurals/pluralize: Pluralize or singularize any word based on a count

在问了chatGPT4之后,找到了这个更简单的方案: