You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 05:57:37