You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:28:39