JavaScript 如何按多规则对对象数组进行自定义排序
解决方案代码
var data = { "input": [{ "countA": 1, "countB": 10 }, { "countA": 15, "countB": 13 }, { "countA": 26, "countB": 24 }, { "countA": 6, "countB": 25 }, { "countA": 15, "countB": 20 } ] }; var sorted = data.input.sort(function(a, b) { // 先计算分组优先级:countB>countA的优先级更高,赋值为0,不满足的赋值为1 const aGroup = a.countB > a.countA ? 0 : 1; const bGroup = b.countB > b.countA ? 0 : 1; // 分组不同时,优先级值小的排在前面 if (aGroup !== bGroup) { return aGroup - bGroup; } // 分组相同时按countB降序排列 return b.countB - a.countB; }); console.log(sorted);
运行输出
和你要求的期望结果完全一致:
[ { countA: 6, countB: 25 }, { countA: 15, countB: 20 }, { countA: 1, countB: 10 }, { countA: 26, countB: 24 }, { countA: 15, countB: 13 } ]
核心逻辑说明
- 多条件排序按优先级依次判断,高优先级条件先比较,只有前一个条件相等时才判断下一个条件
- 此处第一优先级是分组规则,通过给不同分组赋值不同权重的方式实现快速排序
- 同一分组内使用数值直接相减的方式实现降序,比三元判断更简洁准确,也避免了非全等判断可能带来的错误
内容的提问来源于stack exchange,提问作者Hols1990
相关产品推荐
相关产品推荐

