You need to enable JavaScript to run this app. TypeScript中如何实现对象数组的自定义顺序重排?
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何实现对象数组的自定义顺序重排?

汽车数组自定义排序实现方法

核心实现逻辑

自定义排序的核心是提前约定目标顺序的优先级映射,通过权重值对比决定元素位置,避免硬编码多条件判断的冗余逻辑。

具体代码步骤

  • 先定义目标排序的优先级映射,数值越小代表排序越靠前:
    // 按照要求的顺序配置优先级
    const sortPriority: Record<Model, number> = {
      [Model.SEDAN]: 0,
      [Model.CITROEN]: 1,
      [Model.SUZUKI]: 2,
      [Model.MERCEDES]: 3,
    }
    
  • 调用数组内置的sort方法,通过优先级值的差值完成排序:
    carModelPriceArr.sort((carA, carB) => {
      // 对比两个车型的优先级权重,返回差值即可确定排序
      return sortPriority[carA.model] - sortPriority[carB.model]
    })
    

可优化兜底逻辑

如果后续数组可能出现映射表外的未知车型,可以给未知项配置默认权重,统一排到数组末尾,避免出现undefined参与比较导致的排序异常:

const DEFAULT_PRIORITY = 9999
carModelPriceArr.sort((carA, carB) => {
  const aWeight = sortPriority[carA.model] ?? DEFAULT_PRIORITY
  const bWeight = sortPriority[carB.model] ?? DEFAULT_PRIORITY
  return aWeight - bWeight
})

注意事项

数组的sort方法会直接修改原数组的顺序,如果需要保留原数组的顺序不被改动,可以在排序前先做浅拷贝,比如使用[...carModelPriceArr].sort(...)的方式调用排序逻辑。

执行上述排序逻辑后,carModelPriceArr的输出和预期结果完全一致:

[
  {"model":"SEDAN","price":25},
  {"model":"CITROEN","price":15},
  {"model":"SUZUKI","price":30},
  {"model":"MERCEDES","price":20}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 12:57:03