TypeScript中如何按自定义顺序比较颜色字符串实现数组排序
解决方案
要实现自定义业务顺序的排序,最优的方式是预先定义优先级映射表,给每个status值分配对应的权重数值,排序时直接比较权重即可,效率和可维护性都远高于字符串比较。
步骤1:定义优先级映射
按你需要的排序顺序设置权重,数值越小排序越靠前:
const statusPriority = { yellow: 1, green: 2, white: 3, transparent: 4 }
步骤2:改写排序逻辑
排序时先取两个元素的权重值做差,直接返回结果即可,同时兼容异常值(不在映射内的status、空status默认排最后):
arr1.sort((a, b) => { const weightA = statusPriority[a.status] ?? 999 const weightB = statusPriority[b.status] ?? 999 return weightA - weightB })
如果需要同status的条目按其他字段二次排序(比如按name字段字母序),可以扩展逻辑:
arr1.sort((a, b) => { const weightA = statusPriority[a.status] ?? 999 const weightB = statusPriority[b.status] ?? 999 // 优先级相同的情况按name排序 if (weightA === weightB) { return a.name.localeCompare(b.name) } return weightA - weightB })
原方案问题说明
localeCompare是按字符的Unicode编码顺序做排序,仅适合字母序/自然语言排序的场景,无法匹配你自定义的业务排序规则,因此无法满足需求。
内容的提问来源于stack exchange,提问作者erhhhh
相关产品推荐
相关产品推荐

