如何按Set与Tiebreak交替规则对JavaScript对象数组排序?
如何排序JavaScript对象数组:Set N后紧跟对应Tiebreak N
嘿,这个排序需求很好解决,核心思路就是先按名称里的数字分组,再让同组的Set排在Tiebreak前面。咱们一步步来实现:
实现步骤
- 提取序号:从每个对象的
name属性里提取出后面的数字(比如"Set 1"和"Tiebreak 1"的序号都是1),这是分组的关键。 - 排序规则:
- 首先按提取出的序号从小到大排序,确保同序号的Set和Tiebreak挨在一起。
- 同序号的情况下,让
type:0的Set排在type:2的Tiebreak前面(因为0 < 2,直接比较类型值就行)。
完整代码示例
var obj = [ {id: 31, name: "Tiebreak 1", type: 2}, {id: 32, name: "Tiebreak 2", type: 2}, {id: 25, name: "Set 1", type: 0}, {id: 33, name: "Tiebreak 3", type: 2}, {id: 26, name: "Set 2", type: 0}, {id: 34, name: "Tiebreak 4", type: 2}, {id: 35, name: "Tiebreak 5", type: 2}, {id: 27, name: "Set 3", type: 0}, {id: 28, name: "Set 4", type: 0}, {id: 29, name: "Set 5", type: 0} ]; // 排序函数 obj.sort((a, b) => { // 提取名称里的数字序号 const numA = parseInt(a.name.split(' ')[1], 10); const numB = parseInt(b.name.split(' ')[1], 10); // 先按序号排序 if (numA !== numB) { return numA - numB; } // 序号相同的话,Set(type=0)排在Tiebreak(type=2)前面 return a.type - b.type; }); console.log(obj);
代码说明
split(' ')[1]会把名称按空格拆分,取第二个元素就是数字部分,再用parseInt转成整数。- 排序函数里,先比较序号,序号不同就按从小到大排;序号相同的话,比较
type值,0比2小,所以Set会排在前面。
运行这段代码后,数组就会变成你想要的:Set 1 → Tiebreak 1 → Set 2 → Tiebreak 2 → ... 的顺序啦。
内容的提问来源于stack exchange,提问作者gsiradze
相关产品推荐
相关产品推荐

