今天在写代码的时候,遇到了一个小需求

      传入年龄,有一张年龄段的映射表,映射成具体的汉字表示,比如 23 岁代表 青年.

      这个需求很简单,一开始我是这样写的

      1. const ageMap = function (age) {
      2. switch (age) {
      3. case (age > 0 && age <= 3):
      4. return 0;
      5. case (age > 3 && age <= 18):
      6. return 1;
      7. case (age > 18 && age <= 30):
      8. return 2;
      9. case (age > 30 && age <= 60):
      10. return 3;
      11. case (age > 60 && age <= 200):
      12. return 4;
      13. default:
      14. return '';
      15. }
      16. };

      乍一看是没有问题的,但是实际操作直接跳到了 default 返回空字符串,原因就在于 switch case 里的 case 只能使用具体的值,比如 case 1: case: 'aaa': 等等,不能使用表达式!

      所以只能用 if else if

      1. const ageMap = function (age) {
      2. if (age > 0 && age <= 3) {
      3. return 0;
      4. } else if (age > 3 && age <= 18) {
      5. return 1;
      6. } else if (age > 18 && age <= 30) {
      7. return 2;
      8. } else if (age > 30 && age <= 60) {
      9. return 3;
      10. } else if (age > 60 && age <= 200) {
      11. return 4;
      12. }
      13. return '';
      14. };

      后续如果找到更加优雅的写法,会进行更新 :-)