如何对对象数组同时按id和case下的name字段实现双条件排序
多条件对象数组排序实现方案
问题解答
可以在排序时使用多个判断条件。你的需求为优先按case.name字段升序排序,name相同的条目再按id字段升序排序,通过自定义排序比较函数即可实现。
实现思路
- 排序的比较函数会传入两个待比较的对象a、b
- 第一步先对比两者的
case.name字段:如果不相等,直接返回字符串比较结果控制排序顺序 - 第二步如果
name相等,再对比两者的id字段,返回数值差控制id的排序顺序
代码实现(以JavaScript为例)
// 示例数据 const data = [ { "case": { "name": "Exemple1" }, "id": 3 }, { "case": { "name": "Exemple1" }, "id": 2 }, { "case": { "name": "Exemple2" }, "id": 1 }, { "case": { "name": "Exemple3" }, "id": 4 }, { "case": { "name": "Exemple2" }, "id": 6 } ] // 多条件排序逻辑 const sortedData = data.sort((a, b) => { // 优先比较case.name的字典序 const nameCompare = a.case.name.localeCompare(b.case.name) if (nameCompare !== 0) { return nameCompare } // name相同时按id升序排列 return a.id - b.id })
注意:JavaScript原生的
Array.sort()是原地排序,会直接修改原数组。如果需要保留原数组,可以先对数组做浅拷贝后再执行排序,例如:const sortedData = [...data].sort(/* 比较函数 */)
运行代码后得到的sortedData和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Heptagram
相关产品推荐
相关产品推荐

