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
相关产品推荐
相关产品推荐

