【发布时间】:2019-12-30 17:59:39
【问题描述】:
我有以下对象,我想按其优先级字段排序。
{
anchor_block: {
label: 'Anker-Block',
priority: 100,
description: ...,
fields: ...
},
categories_block: {
label: 'Categories-Block',
description: ...,
fields: ...
},
contact_block: {
label: 'Kontakt-Block',
description: ...,
fields: ...
},
employee_block: {
label: 'Mitarbeiter-Block',
priority: 90,
description: ...,
fields: ...
}
}
我尝试用 lodash 对它们进行排序:
_.orderBy(blocks, ['priority'], ['desc']);
但是这个解决方案会从我的对象中删除所有键(因为它返回一个数组),并且它还将没有优先级字段的键放在顶部:
[
{
label: 'Categories-Block',
description: ...,
fields: ...
},
{
label: 'Kontakt-Block',
description: ...,
fields: ...
},
{
label: 'Anker-Block',
priority: 100,
description: ...,
fields: ...
},
{
label: 'Mitarbeiter-Block',
priority: 90,
description: ...,
fields: ...
},
]
你们中有人知道如何用 lodash 解决这个问题吗?我想避免自己重复它,因为我确信这是可能的,我只是不明白它。
【问题讨论】:
-
对象在 JavaScript 中没有排序。
-
@Barmar 你确定吗?我们曾经说过,在迭代对象时无法保证键的顺序,但这似乎不再正确。如果键是按特定顺序插入的,那么我们不能说对象可以排序吗?
-
自 es2020 以来,属性顺序在所有情况下都是明确定义的。如果没有整数索引属性且不涉及符号,则该顺序为can be freely manipulated,但这绝不意味着应该这样做。使用适合任务的适当数据结构,而不是对象的属性顺序。
-
非常感谢。你会选择什么样的数据结构?我应该将它们添加到数组中,还是如何保留顺序?
标签: javascript sorting object lodash