JavaScript如何按指定Status优先级自定义排序对象数组
JavaScript 实现数组按字段自定义优先级排序
实现思路
Array.sort()的比较函数并不局限于简单的升序、降序逻辑:只要你为目标字段的不同取值定义好优先级权重,通过比较两个元素的权重差值,就能实现完全自定义的排序规则。
从你给出的期望结果可以看出,Status字段的排序优先级为:Pending(待审核)→ Approved(通过)→ Rejected(驳回),我们只需要给这三个状态分配从小到大的权重值,排序时按权重比较即可。
比较函数规则:返回值小于0时,a会排在b前面;返回值大于0时,b会排在a前面;返回0则二者相对位置不变,权重做差的逻辑正好匹配这个规则。
完整实现代码
var objs = [ { Product: 'Lazslo', Status: 'Approved' }, { Product: 'Pig', Status: 'Rejected' }, { Product: 'Pirate', Status: 'Pending' } ]; // 定义状态优先级映射:数值越小,排序位置越靠前 const statusRank = { Pending: 0, Approved: 1, Rejected: 2 }; // 执行自定义排序 objs.sort((a, b) => statusRank[a.Status] - statusRank[b.Status]);
结果验证
执行上述代码后,objs的输出和你预期的结果完全一致:
[ { Product: 'Pirate', Status: 'Pending' }, { Product: 'Lazslo', Status: 'Approved' }, { Product: 'Pig', Status: 'Rejected' } ]
扩展说明
- 如果后续需要调整排序顺序,直接修改
statusRank里对应状态的数值即可,不需要改动排序逻辑。 - 如果数组中可能存在未被优先级映射覆盖的状态值,可以加默认权重兜底,比如把比较逻辑写成
(statusRank[a.Status] ?? 99) - (statusRank[b.Status] ?? 99),就能把未知状态统一放到排序结果的末尾。
内容的提问来源于stack exchange,提问作者New Techie
相关产品推荐
相关产品推荐

