[英]Sort object by value with lodash
我有一個看起來像這樣的對象:
var unsorted = {a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1}
我有興趣使用 lodash 按降序對其進行排序,因此預期結果應該是:
var sortd = {b: 1, g: 1,c: 2, e: 3, d: 4, f: 6, a: 15}
我曾嘗試使用 lodash orderBy
但它給出了一個僅包含排序值的數組。
_.orderBy(tempCount, Number, ['desc'])
//Result
[1,1,2,3,4,6,15]
JavaScript不保證對象中鍵的順序,這就是 lodash 返回一個數組的原因,因為不能保證具有有序鍵的對象。 看到這個問題。
但是,您可以使用Map
,它可以保證鍵的順序。
你可以用純 JavaScript 做到這一點:
const unsorted = { a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1 }; const sorted = new Map(Object.entries(unsorted).sort((a, b) => a[1] - b[1])); for (const [key, val] of sorted) { console.log(key, val); }
您有多種方法可以迭代生成的地圖的內容:
map.values()
:獲取值數組map.entries()
:獲取[key, value]
對的數組map.keys()
:獲取鍵數組請參閱關於 Map 的文檔。
您可以使用排序的鍵/值對構建一個新對象。
實際標准或屬性順序:
要完全控制順序,請使用帶有鍵的數組並將其作為值的排序訪問器。
var unsorted = { a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1 }, sorted = _(unsorted) .toPairs() .orderBy([1], ['desc']) .fromPairs() .value() console.log(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
與按降序排序_.orderBy
使用最后一個參數為一個特定的順序,而不是, _.sortBy
,只允許升序排序。
var unsorted = { a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1 }, sorted = _(unsorted) .toPairs() .orderBy(1, 'desc') .fromPairs() .value() console.log(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
在這里你有另一種方法(沒有 lodash )。 基本上我們使用Object.entries(unsorted)
創建和類型[[key1, value1], [key2, value2],...]
的數組,然后對該數組進行排序(升序/降序)比較values
,最后再次構造您最初擁有的對象結構,首先將對[key, value]
映射到對象{key: value}
,然后使用Object.assign()
將所有這些對象分配給一個新對象。
var unsorted = {a: 15, b: 1,c: 2, d: 4, e: 3, f: 6, g: 1}; let sortedAsc = Object.entries(unsorted) .sort(([k1,v1], [k2,v2]) => v1 - v2) .map(([x,y]) => ({[x]:y})); let sortedDesc = Object.entries(unsorted) .sort(([k1,v1], [k2,v2]) => v2 - v1) .map(([x,y]) => ({[x]:y})); let objSortedAsc = Object.assign({}, ...sortedAsc); let objSortedDesc = Object.assign({}, ...sortedDesc); console.log("ASC: ", objSortedAsc, "DESC: ", objSortedDesc);
.as-console {background-color:black !important; color:lime;} .as-console-wrapper {max-height:100% !important; top:0;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.