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

如何在JavaScript中按两个键对对象数组进行排序

对象数组双字段排序(空字符串优先)

要实现你需要的排序效果,只需在现有排序逻辑基础上,增加PRIORITY字段的二次判断即可,具体实现如下:

原始数组

var data = [
  {COMPONENT: 'PM-ABC', PRIORITY: '0.35'},
  {COMPONENT: 'PM', PRIORITY: '0.35'},
  {COMPONENT: 'PM', PRIORITY: ''}
];

修改后的排序代码

data.sort(function(a, b) {
  // 先按COMPONENT升序比较
  const cmpComponent = a.COMPONENT.localeCompare(b.COMPONENT);
  if (cmpComponent !== 0) {
    return cmpComponent;
  }
  // COMPONENT相同时,处理PRIORITY排序:空字符串优先
  if (a.PRIORITY === '') return -1;
  if (b.PRIORITY === '') return 1;
  // 非空时按字符串升序排列
  return a.PRIORITY.localeCompare(b.PRIORITY);
});

逻辑说明

  • 先用localeCompare处理COMPONENT的升序排序,这个方法比手动判断>/<更适配字符串的自然排序规则,能正确处理带连字符的字符串(比如PM和PM-ABC的比较)
  • 当两个元素的COMPONENT字段相同时,进入PRIORITY的判断:
    • 如果当前元素的PRIORITY是空字符串,直接让它排在前面(返回-1)
    • 如果对比元素的PRIORITY是空字符串,让对比元素排在前面(返回1)
    • 两者都非空时,继续用localeCompare做升序排序

最终排序结果

[
  {COMPONENT: 'PM', PRIORITY: ''},
  {COMPONENT: 'PM', PRIORITY: '0.35'},
  {COMPONENT: 'PM-ABC', PRIORITY: '0.35'}
]

内容的提问来源于stack exchange,提问作者ankit lohiya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:40:36