簡體   English   中英

Array.sort 按字母順序按 object 鍵/值

[英]Array.sort alphabetically by object key/value

所以我有這個包含對象的數組:

var terms = [
 {
  'class-1': {name: 'English', completed: '12/02/19', letterGrade: 'A'}, 
  'class-2': {name: 'Math', completed: '12/02/19', letterGrade: 'A'},
  'class-3': {name: 'P.E.', completed: '12/02/19', letterGrade: 'A'},
  'class-4': {name: 'World History', completed: '12/02/19', letterGrade: 'A'}
 },
 {
  'class-1': {name: 'P.E.', completed: '12/02/19', letterGrade: 'A'},
  'class-2': {name: 'World History', completed: '12/02/19', letterGrade: 'A'},
 },
 {
  'class-1': {name: 'P.E.', completed: '12/02/19', letterGrade: 'A'},
  'class-2': {name: 'English', completed: '12/02/19', letterGrade: 'A'},
  'class-3': {name: 'Math', completed: '12/02/19', letterGrade: 'A'},
 },
 {
  'class-1': {name: 'English', completed: '12/02/19', letterGrade: 'A'},
  'class-2': {name: 'Algebra', completed: '12/02/19', letterGrade: 'A'},
  'class-3': {name: 'Psychology', completed: '12/02/19', letterGrade: 'A'},
 }
]

我想根據 class 的名稱按字母順序對每個嵌套對象進行排序。 但我希望對整個數組進行排序。

不知道我應該如何 go 這樣做。 阻礙我的是數據中的嵌套數量。

給定以下輸入:

let classes = {
  'class-1': {name: 'P.E.', completed: '12/02/19', letterGrade: 'A'},
  'class-2': {name: 'English', completed: '12/02/19', letterGrade: 'A'},
  'class-3': {name: 'Math', completed: '12/02/19', letterGrade: 'A'},
}

您可以將每個鍵/值對分成條目,根據需要對這些條目進行排序,然后重新分配給 object,如下所示:

let allEntries = Object.entries(classes)
let sortedEntries = allEntries.sort((a,b) => a[1].name.localeCompare(b[1].name))
let obj = Object.fromEntries(sortedEntries)

這將產生以下結果:

{
  'class-2': {name: 'English', completed: '12/02/19', letterGrade: 'A'},
  'class-3': {name: 'Math', completed: '12/02/19', letterGrade: 'A'},
  'class-1': {name: 'P.E.', completed: '12/02/19', letterGrade: 'A'}
}

雖然請注意插入順序對於 js object 屬性不是確定性的

堆棧片段中的演示

 let classes = { 'class-1': {name: 'PE', completed: '12/02/19', letterGrade: 'A'}, 'class-2': {name: 'English', completed: '12/02/19', letterGrade: 'A'}, 'class-3': {name: 'Math', completed: '12/02/19', letterGrade: 'A'}, } let allEntries = Object.entries(classes) let sortedEntries = allEntries.sort((a,b) => a[1].name.localeCompare(b[1].name)) let obj = Object.fromEntries(sortedEntries) console.log(obj)

暫無
暫無

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

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