首页 > 解决方案 > 我必须使用多个字段组合对 JavaScript 数组进行排序,其中一个字段是数字和字符串的组合

问题描述

我必须使用多个字段组合对 JavaScript 数组进行排序,并且其中一个字段是数字和字符串的组合。

我的代码片段:

      emps = [
          {'first_name':'PQR','grade':'K'},
          {'first_name':'ABC','grade':'K'},
          {'first_name':'LMN','grade':'4'},
          {'first_name':'CDE','grade':'2'},
          {'first_name':'JKP','grade':'12'},
          {'first_name':'ASD','grade':'Others'}
      ];

我可以使用以下代码对上述数组进行排序:

          emps.sort((a, b) => {
              
              if (a.grade === "K" || b.grade === "Other") {
                return -1;
              }
              if (a.grade === "Other" || b.grade === "K") {
                return 1;
              }
              return +a.grade - +b.grade;
          });

它按等级准确排序(K,1,2,3.....,12,Other),但我也想按照 first_name 和 Grade 对其进行排序

请您建议我更改或脚本。

标签: javascriptjquery

解决方案


您可以使用订单对象进行排序,然后按grade或排序first_name

const emps = [{ first_name: 'PQR', grade: 'K' }, { first_name: 'ABC', grade: 'K' }, { first_name: 'LMN', grade: '4' }, { first_name: 'CDE', grade: '2' }, { first_name: 'JKP', grade: '12' }, { first_name: 'ASD', grade: 'Others' }],
      order = { K: -1, Others: 1, default: 0 };
      
emps.sort((a, b) =>
    (order[a.grade] || order.default) - (order[b.grade] || order.default) ||
    a.grade - b.grade ||
    a.first_name.localeCompare(b.first_name)
);

console.log(emps);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读