我如何按 user_id 對這個物件進行排序?
{
key_1: { user_id: 3 },
key_2: { user_id: 1 },
key_3: { user_id: 2 }
}
我需要這個:
{
key_2: { user_id: 1 },
key_3: { user_id: 2 },
key_1: { user_id: 3 }
}
感謝幫助
uj5u.com熱心網友回復:
ES6 規定了物件鍵的遍歷順序(參見這篇文章):
- 以數字升序排列的整數索引。
- 然后,所有其他字串鍵,按照它們添加到物件的順序。
- 最后,所有符號鍵,按照它們添加到物件的順序。
這意味著只要您使用字串或符號的非整數鍵(不是兩者),您就可以通過使用您需要的插入順序中的鍵創建一個新物件來“排序”物件鍵。
例如,用于Object.entries()獲取對陣列[key, value],按 排序user_id,然后使用 轉換回物件Object.fromEntries():
const obj = { key_1: { user_id: 3 }, key_2: { user_id: 1 }, key_3: { user_id: 2 }}
const result = Object.fromEntries(
Object.entries(obj)
.sort(([, a], [, b]) => a.user_id - b.user_id)
)
console.log(result)
但是,對于具有整數鍵的物件,這將失敗:
const obj = { 1: { user_id: 3 }, 2: { user_id: 1 }, 3: { user_id: 2 }}
const result = Object.fromEntries(
Object.entries(obj)
.sort(([, a], [, b]) => a.user_id - b.user_id)
)
console.log(result)
因此,最好創建一個鍵陣列,按您想要的順序對其進行排序,然后使用它按該順序獲取屬性值,這樣會更好且更不容易出錯:
const obj = { key_1: { user_id: 3 }, key_2: { user_id: 1 }, key_3: { user_id: 2 }}
const result = Object.keys(obj)
.sort((a, b) => obj[a].user_id - obj[b].user_id)
console.log(result.forEach(key => console.log(obj[key])))
uj5u.com熱心網友回復:
你不能。我認為您缺少物件和陣列的性質。物件中屬性的順序無關緊要。當然,在一個陣列中它可能。
例如,如果您收到一個物件并且想要顯示已排序的資料,我建議您將該物件轉換為陣列,然后對其進行排序:
const object = {
key_1: {
user_id: 3
},
key_2: {
user_id: 1
},
key_3: {
user_id: 2
}
};
const array = Object.entries(object)
const sortedArray = array.sort(([, aValue], [, bValue]) => aValue.user_id > bValue.user_id)
console.log(sortedArray)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/471921.html
標籤:javascript 排序 目的
