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

如何按自定义等级优先级对JavaScript对象数组进行排序?

实现方案

思路

  • 先定义等级的优先级权重,数值越小排序越靠前
  • 将原等级映射对象反转,生成「车辆ID-排序权重」的映射表,方便快速查找
  • 排序时优先按权重升序排列,权重相同的场景可回退到原position排序(可根据需求调整)

完整实现代码

// 原数据
const cars = [
  {
    id: 'a1c1',
    position: 3,
    name: 'Car 3',
  },
  {
    id: 'b9f6',
    position: 1,
    name: 'Car 1',
  },
  {
    id: '3b6d',
    position: 2,
    name: 'Car 2',
  },
];
const carsByRank = {
  good: 'b9f6',
  best: '3b6d',
  average: 'a1c1',
};

// 1. 定义等级优先级,数值越小越靠前
const rankWeight = {
  best: 1,
  good: 2,
  average: 3
}

// 2. 生成ID对应权重的映射表
const idToWeight = Object.fromEntries(
  Object.entries(carsByRank).map(([rank, id]) => [id, rankWeight[rank]])
)

// 3. 排序实现
const sorted = cars.sort((a, b) => {
  // 无匹配等级的默认权重设为99,统一排在最后
  const weightA = idToWeight[a.id] ?? 99
  const weightB = idToWeight[b.id] ?? 99
  // 优先按权重排序
  if (weightA !== weightB) {
    return weightA - weightB
  }
  // 权重相同场景按原position升序排列,不需要可删除该行
  return a.position - b.position
})

额外说明

  • 数组的sort方法是原地排序,如果需要保留原数组不变,可以先对原数组做浅拷贝再排序:const sorted = [...cars].sort(...)
  • 如果需要调整等级顺序或者新增等级,只需要修改rankWeight对象的配置即可,无需修改排序逻辑
  • 无匹配等级的车辆默认权重设为99,统一排在指定等级之后,如果需要调整这些车辆的排序规则,可以修改权重相同后的回退逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:36:04