javascript - 使用 lodash 按子值对对象进行排序
问题描述
我有以下对象:
const object = {
"9c8vDTruRDPi937aHMMz":{
name: "item1",
createdAt: {
seconds: 1582227276,
nanoseconds: 68000000
}
},
"rAexYu2rAz0AEnD77x5p":{
name: "item2",
createdAt: {
seconds: 1582227577,
nanoseconds: 922000000
}
}
}
并希望根据 createdAt.seconds 对其进行排序并将其保留为对象。
例如,返回值将是(如果根据秒数和 Desc 排序):
const sortedByDateObject = {
"rAexQu3rdm0AEnD77x5p":{
name: "item2",
createdAt: {
seconds: 1582227577,
nanoseconds: 922000000
}
},
"9c8vDGryRSZi817aHMMz":{
name: "item1",
createdAt: {
seconds: 1582227276,
nanoseconds: 68000000
}
}
}
知道如何使用 lodash 对数组进行排序,但不知道这种带有嵌套对象的复杂任务。
任何帮助都非常感谢:)
解决方案
这会将您的对象变成一个可以正确排序的数组(正如@Taki 所指出的,不保证对象属性顺序)。
const object = {
"9c8vDTruRDPi937aHMMz":{
name: "item1",
createdAt: {
seconds: 1582227276,
nanoseconds: 68000000
}
},
"rAexYu2rAz0AEnD77x5p":{
name: "item2",
createdAt: {
seconds: 1582227577,
nanoseconds: 922000000
}
}
};
const orderedArray = _.chain(object)
.toPairs()
.map(([key, ...obj]) => ({
key,
...obj[0],
createdAtSeconds: obj[0].createdAt.seconds
}))
.orderBy(['createdAtSeconds'], ['desc'])
.map(({ createdAtSeconds, ...obj }) => obj)
.value()
console.log(orderedArray);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>
推荐阅读
- python - 如何使最小索引增加?
- python - 如何清理我的数据,以便将其转换为 csv 文件
- spinnaker - 在大三角帆中,如果我在手动判断步骤单击停止按钮,是否可以运行更多步骤?
- prestashop - 建立连接以确定您的平台版本时发生异常
- python - 循环数据框列表以根据熊猫中的列进行过滤
- javascript - 如何在 Next.js 中关闭 CSS 模块功能?
- angular - 如何将消息推送给每个用户的 UserAdmin
- c# - 由于 JSON 原因,如何将元素附加到 C# 数组?
- visual-studio - 当我们在 Visual Studio SSIS 项目中点击调试按钮时——它是在 32 位还是 64 位模式下运行——并且 32 位提供程序是否与 64 位运行模式兼容?
- c++ - c++中的this指针