簡體   English   中英

Lodash如何將對象轉換為排序數組

[英]How to transform object into sorted array by Lodash

如何通過lodash將{2:'b',3:'c',1:'a'}轉換為[{1:'a'},{2:'b'},{3:'c'}]

使用Object.keys + Array.map相當簡單,您實際上不需要lodash:

 const obj = {2:'b',3:'c',1:'a'}; const arr = Object.keys(obj).map(key => ({ [key]: obj[key] })) console.log(arr) 

關於缺少sort功能的問題,以上代碼利用了這樣一個事實,即(按規范)數字索引的對象鍵是按順序存儲的。 自己檢查訂單:

 console.log({2:'b',3:'c',1:'a'}) 

這是規范的相關部分

9.1.12 [[OwnPropertyKeys]]()

調用O的[[OwnPropertyKeys]]內部方法時,將執行以下步驟:

  1. 讓鍵成為一個新的空列表。

  2. 對於O的每個自己的屬性鍵P(它是整數索引),以數字索引的升序排列

    2a。 將P添加為鍵的最后一個元素。

通過即將發布的帶有Object.entries Javascript,您可以將單個對象映射到一個新數組。

 var data = {2:'b',3:'c',1:'a'}, result = Object .entries(data) .sort((a, b) => a[0] - b[0]) .map(([k, v]) => ({ [k]: v })); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

使用lodash,您可以使用

 var data = {2:'b',3:'c',1:'a'}, result = _ .chain(data) .toPairs(data) .sortBy([0]) .map(o => _.fromPairs([o])); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script> 

Lodash並不是真正實現您想要的功能所必需的,但是無論如何我仍然在添加它並添加一個排序的函數。 我還包括了本機JavaScript方法。

 const obj = {b: 3, c: 2, a: 1}; const sortByKeys = object => { const keys = Object.keys(object) const sortedKeys = _.sortBy(keys) return _.map(sortedKeys, key => ({ [key]: object[key]})) } // the lodash way, and sorted console.log(sortByKeys(obj)) // simpler way const result = Object.keys(obj) .map(key => ({ [key]: obj[key] })) console.log(result) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script> 

為什么要使用lodash? 只需使用常規Javascript。 解決方案可以稍微清理一下,但其想法是循環遍歷對象並將所需的格式推送到新數組中。 為了方便起見,我也將排序放在那里,但可以根據您的喜好隨意調整。

const obj = {2:'b',3:'c',1:'a'}

let newArr = [];
for (var key in obj) {
  newArr.push({[key]: obj[key]})
  newArr.sort((a, b) => a[key] > b[key])
}
console.log(newArr)

暫無
暫無

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

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