簡體   English   中英

按值對對象數組進行排序

[英]Sorting an array of objects by values

我需要按對象的值對對象數組進行排序,我使用以下代碼來執行此操作:

function compare(a,b){return dict[a]-dict[b]} Object.keys(dict).sort(compare)

如果每個值都不同,它會起作用,但是如果兩個對象具有相同的值,它將按照它們在數組中出現的順序保留它們,但我希望它們按字母順序排序。 我想不出辦法做到這一點。

dict = {a:1, d:4, c:2, b:4, e:5, f:3}應該是:

{a:1, c:2, f:3, b:4, d:4, e:5 }

但我得到了這個:

{a:1, c:2, f:3, d:4, b:4, e:5 }

您可以更改 compareFunction 以使用localeCompare

dict[a] - dict[b] || a.localeCompare(b)

如果dict[a] - dict[b]返回 0,它將檢查下一個條件並按字母順序對鍵進行排序

這是一個片段:

 const dict = {a:1, d:4, c:2, b:4, e:5, f:3} function compare(a, b) { return dict[a] - dict[b] || a.localeCompare(b) } const sorted = Object.keys(dict).sort(compare).reduce((acc, k) => (acc[k] = dict[k], acc), {}) console.log( sorted )

因此,如果差異等於零,請比較鍵

 function compare(a, b) { var diff = dict[a] - dict[b] return diff === 0? a.localeCompare(b): diff } const dict = { a: 1, d: 4, c: 2, b: 4, e: 5, f: 3 } const result = Object.keys(dict).sort(compare).reduce((o, x) => ({...o, [x]: dict[x], }), {}) console.log(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM