如何按照另一个数组中定义的order顺序对目标数组进行排序?
实现方案
实现思路
- 先将status数组转换为状态名对应order值的映射表,避免排序时重复遍历status数组,提升查询效率
- 自定义sort方法的排序规则:优先按status对应的order值升序排列,同状态下按price升序排列
完整代码
// 原始数组 const status = [ {title: 'pending', order: 1}, {title: 'success', order: 2} ] const task = [ {status: 'success', price: 100}, {status: 'success', price: 150}, {status: 'pending', price: 100}, {status: 'success', price: 300} ] // 生成状态排序权重映射 const statusOrderMap = Object.fromEntries(status.map(item => [item.title, item.order])) // 执行排序 task.sort((a, b) => { const orderGap = statusOrderMap[a.status] - statusOrderMap[b.status] // 状态权重不同时按权重排序 if (orderGap !== 0) return orderGap // 状态权重相同时按价格升序 return a.price - b.price })
执行后task数组的输出结果和你要求的完全一致。如果后续需要调整状态的排序优先级,只需要修改status数组里对应状态的order值即可,排序逻辑不需要做任何改动。
内容的提问来源于stack exchange,提问作者Marimokung
相关产品推荐
相关产品推荐

