簡體   English   中英

使用 lodash 按值對對象進行排序

[英]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.

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