簡體   English   中英

按數字命名屬性對命名對象的 JavaScript 數組進行排序

[英]Sort a JavaScript array of named objects by numeric named property

我已經看到了多個類似的問題,但我不知道如何將建議的解決方案應用於稍微不同的數據結構。

這是一個命名對象數組,需要按屬性count進行數字排序:

const myArray = [
  {ABC:{label:'ABC', count:3}},
  {EFG:{label:'EFG', count:10}},
  {DEF:{label:'DEF', count:9}},
  {FGH:{label:'FGH', count:1}}
]

排序后的結果數組應該是這樣的:

myArray = [
   {FGH:{label:'FGH', count:1}},
   {ABC:{label:'ABC', count:3}},
   {DEF:{label:'DEF', count:9}},
   {EFG:{label:'EFG', count:10}}
]

如果對象沒有名稱(ABC、DEF 等),則MDN web 文檔(以及此處的多個類似問題)包含對此類數組進行排序的解決方案。

也就是說,考慮一個稍微不同的未命名對象數組:

const myArray1 = [
  {label:'ABC', count:3},
  {label:'EFG', count:10},
  {label:'DEF', count:9},
  {label:'FGH', count:1}
]

這個單線工作: myArray1.sort((a, b) => a.count - b.count)獲得:

myArray1 = [
  {label:'FGH', count:1},
  {label:'ABC', count:3},
  {label:'DEF', count:9},
  {label:'EFG', count:10}
]

我知道處理這個問題需要一個更復雜的 function 表達式,但我只是不太了解這種語言(還)無法弄清楚。

在比較之前先取第一個(也是唯一的)object 值。

 const myArray = [ {ABC:{label:'ABC', count:3}}, {EFG:{label:'EFG', count:10}}, {DEF:{label:'DEF', count:9}}, {FGH:{label:'FGH', count:1}} ] const getCount = obj => Object.values(obj)[0].count; myArray.sort((a, b) => getCount(a) - getCount(b)); console.log(myArray);

暫無
暫無

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

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