javascript - 我必须使用多个字段组合对 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 对其进行排序。
请您建议我更改或脚本。
解决方案
您可以使用订单对象进行排序,然后按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; }
推荐阅读
- node.js - 您可以在您正在开发的 CLI 中运行外部 CLI 命令吗?
- c++ - 在cond_var.notify()之前是否需要使用互斥锁?
- wordpress - 如何找出在 wordpress-header 中定义了脚本标签的位置?
- php - Will Predis be able to interact with a newer Redis version?
- c - 计算 C 代码库中函数和数据结构的数量
- actions-on-google - Google Home 风扇速度问题
- django - Django HyperlinkedRelatedField read_only False 给出查询集错误
- async-await - 处理因取消长时间运行的异步调用而导致的 Outlook 加载项 Inspector UI contorl null 引用异常的最佳方法是什么?
- java - Java数据库错误:数据库已关闭
- javascript - 在可汗学院 html 程序中设置 Content-Security-Policy。能够访问可汗学院内的 html 文件