[英]Sort an object by an optional field without losing the keys
我有以下對象,我想按其優先級字段對其進行排序。
{
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 解決這個問題嗎? 我想避免自己迭代它,因為我確定這是可能的,我只是不明白它。
更新的答案:方法是存儲所有鍵,根據您想要的順序對它們進行排序,然后使用這些鍵以所需的順序從原始對象中檢索值。
let obj = {
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: '...'
}
}
/*
Plain JS, no Lodash
*/
let sortedKeys = Object.keys(obj);
sortedKeys.sort((key1, key2) => {
let p1 = obj[key1].priority || 0, p2 = obj[key2].priority || 0;
if(p1<p2)
return 1; // Put key2 first in sorted order
return -1; // Else, put key1 first in sorted order
/*
For ascending order, do this
if(p1<p2)
return -1;
return 1;
*/
})
sortedKeys.forEach(key => {
console.log(key,"-->",obj[key]);
})
輸出
anchor_block --> { label: 'Anker-Block',
priority: 100,
description: '...',
fields: '...' }
employee_block --> { label: 'Mitarbeiter-Block',
priority: 90,
description: '...',
fields: '...' }
categories_block --> { label: 'Categories-Block', description: '...', fields: '...' }
contact_block --> { label: 'Kontakt-Block', description: '...', fields: '...' }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.