如何使用Lodash按AcctCode和SuperID升序排序嵌套对象数组
用Lodash按多字段升序排序的正确姿势
嘿,我懂你为啥困惑了——_.orderBy其实完全能搞定按AcctCode和SuperID升序排序的需求,只是你可能没正确传入排序的关键参数😉 我给你一步步演示怎么实现:
核心用法说明
_.orderBy的完整语法是:
_.orderBy(collection, [iteratees=[_.identity]], [orders=['asc']])
- 第一个参数是你的数据集(数组)
- 第二个参数是排序字段的数组(按优先级排列:先按第一个字段排,相同值时再按第二个字段排)
- 第三个参数是对应的排序方向数组,默认都是
'asc'(升序),所以如果全是升序可以省略这个参数
示例演示
假设你的原始数据集是这样的:
const data = [ { AcctCode: "B001", SuperID: 2, Name: "张三" }, { AcctCode: "A002", SuperID: 1, Name: "李四" }, { AcctCode: "B001", SuperID: 1, Name: "王五" }, { AcctCode: "A001", SuperID: 2, Name: "赵六" } ];
正确排序代码
直接传入要排序的字段数组即可:
// 完整写法(明确指定升序) const sortedData = _.orderBy(data, ['AcctCode', 'SuperID'], ['asc', 'asc']); // 简化写法(默认升序,可省略第三个参数) // const sortedData = _.orderBy(data, ['AcctCode', 'SuperID']);
预期排序结果
执行后会得到按AcctCode升序,相同AcctCode再按SuperID升序的结果:
[ { AcctCode: "A001", SuperID: 2, Name: "赵六" }, { AcctCode: "A002", SuperID: 1, Name: "李四" }, { AcctCode: "B001", SuperID: 1, Name: "王五" }, { AcctCode: "B001", SuperID: 2, Name: "张三" } ]
特殊场景处理
如果你的字段是嵌套在对象内部的(比如item.details.AcctCode),可以用函数作为迭代器来指定字段:
const sortedData = _.orderBy(data, [ item => item.details.AcctCode, item => item.details.SuperID ]);
之前你只传_.orderBy(data)的话,Lodash会默认用_.identity迭代器,也就是按对象的原始内存顺序排序,自然得不到你想要的结果啦~
内容的提问来源于stack exchange,提问作者Muthukumar Marichamy
相关产品推荐
相关产品推荐

