如何使用单个sort方法按指定多条件排序特定结构的对象数组?
用单个sort方法实现指定对象数组排序
完全可以通过单个sort方法实现你的排序需求,核心是在比较函数里按规则优先级分层判断,以下是具体实现代码(以TypeScript为例):
// 示例数组 const seatArr: { seats: number; area: string }[] = [ { seats: 3, area: "living" }, { seats: 5, area: "kitchen" }, { seats: 5, area: "garden" }, { seats: 6, area: "balcony" }, { seats: 7, area: "study" }, { seats: 4, area: "bedroom" }, { seats: 2, area: "bathroom" }, ]; // 单个sort方法完成排序 seatArr.sort((a, b) => { // 规则1:5座对象排最前 const aIsFive = a.seats === 5; const bIsFive = b.seats === 5; if (aIsFive && !bIsFive) return -1; if (!aIsFive && bIsFive) return 1; // 规则2:同为5座时,garden区域优先 if (aIsFive && bIsFive) { const aIsGarden = a.area === "garden"; const bIsGarden = b.area === "garden"; if (aIsGarden && !bIsGarden) return -1; if (!aIsGarden && bIsGarden) return 1; return 0; } // 区分剩余元素的类型:座位数>5 或 <5 const aOverFive = a.seats > 5; const bOverFive = b.seats > 5; // 规则3:座位数>5的按升序排列 if (aOverFive && bOverFive) { return a.seats - b.seats; } // 规则4:座位数<5的按降序排列 if (!aOverFive && !bOverFive) { return b.seats - a.seats; } // 座位数>5的排在<5的前面(规则优先级:5座 > >5座 > <5座) return aOverFive ? -1 : 1; }); console.log(seatArr);
逻辑拆解
- 规则1优先级最高:先判断两个元素是否为5座,直接把5座元素前置。
- 规则2仅针对5座元素:当两个都是5座时,再比较
area字段,把garden的排前面。 - 规则3和4分群处理:剩下的元素分成“座位数>5”和“座位数<5”两组,组内分别按升序、降序排序,同时保证“>5组”排在“<5组”前面。
内容的提问来源于stack exchange,提问作者JackFrost
相关产品推荐
相关产品推荐

