繁体   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