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

如何在JavaScript对象数组多属性排序时强制指定类别优先?

问题:强制指定类别排在数组排序首位

原始数据

// dishes: [
   {category: 'LEGUME', description: 'A'},
   {category: 'VEGETABLE', description: 'N'},
   {category: 'VEGETABLE', description: 'B'},
   {category: 'VEGETABLE', description: 'A'},
   {category: 'FISH', description: 'C'},
   {category: 'LEGUME', description: 'E'},
   {category: 'LEGUME', description: 'B'},
   {category: 'LEGUME', description: 'N'},
]

原排序逻辑

原本使用的排序函数:

const dishes = dishes.sort((a, b) => {
            if (a.category > b.category) return -1;
            if (a.category < b.category) return 1;
            return a.description.localeCompare(b.description);
          });

原排序结果

排序后输出:

// dishes: [
   {category: 'LEGUME', description: 'A'},
   {category: 'LEGUME', description: 'B'},
   {category: 'LEGUME', description: 'E'},
   {category: 'LEGUME', description: 'N'},
   {category: 'VEGETABLE', description: 'A'},
   {category: 'VEGETABLE', description: 'B'},
   {category: 'VEGETABLE', description: 'N'},
   {category: 'FISH', description: 'C'},
]

期望排序结果

希望将VEGETABLE类别强制排在最前面,输出如下:

// dishes: [
   {category: 'VEGETABLE', description: 'A'},
   {category: 'VEGETABLE', description: 'B'},
   {category: 'VEGETABLE', description: 'N'},
   {category: 'LEGUME', description: 'A'},
   {category: 'LEGUME', description: 'B'},
   {category: 'LEGUME', description: 'E'},
   {category: 'LEGUME', description: 'N'},
   {category: 'FISH', description: 'C'},
]

可行解决方案

感谢@Andrew Parks提供的最终实现:

dishes.sort((a, b) =>
    +(b.category === "VEGETABLE") -
    +(a.category === "VEGETABLE") ||
    a.category.localeCompare(b.category) ||
    a.description.localeCompare(b.description)
);

逻辑说明:

  1. 最高优先级:通过+(b.category === "VEGETABLE") - +(a.category === "VEGETABLE")实现目标类别前置。布尔值转数字后,若b是目标类别、a不是,结果为1-0=1,a会排在b后面;若a是目标类别、b不是,结果为0-1=-1,a会排在b前面;两者同为或同不为目标类别时,结果为0,进入下一层判断。
  2. 次优先级:按category字段的自然语言排序规则排序。
  3. 最后优先级:按description字段的自然语言排序规则排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:05:24