【问题标题】:Sort an array of objects by a given property order [duplicate]按给定的属性顺序对对象数组进行排序[重复]
【发布时间】:2018-10-11 10:35:26
【问题描述】:

我有这个数组:

displayedColumns = ['CompanyName','Ticker', 'Id', 'Name', 'ActualTradeDate', 
  'Spot', 'PreviousTradeDate', 'PreviousSpot', 'FPrice', 'Status']

以及具有上述值作为属性的对象数组:

data : [{Ticker : ".. " ......... Status : "... " } , .... {...} ] 

但数据数组中的属性未按“displayedColums”顺序排序(根据需要)

最终想要的结果是:

data = [{  CompanyName : ".. " Ticker : ".."......Status : ".." },
{  CompanyName : ".. " Ticker : ".."......Status : ".." },....
{  CompanyName : ".. " Ticker : ".."......Status : ".." }]

**为了清楚起见,我不希望按某个属性的 asc/desc 值对数组进行排序。我想将数组中属性的顺序更改为“displayedColumn”顺序

我不确定如何按属性顺序对数组进行排序。 非常感谢

【问题讨论】:

  • 请分享一些示例输入和预期输出。
  • 据我从您的问题中可以看出,您想按对象属性对对象数组进行排序。该问题已被反复询问和回答,因此我已将您的问题作为这些问题的副本关闭。如果这不是您要问的,请更新问题,明确说明您想要做什么,以及示例输入和输出,我们可以重新提出问题。
  • 添加了评论
  • 对象的属性没有排序(反正你不需要)如果你想按属性排序,google是我们的朋友

标签: javascript arrays angular typescript sorting


【解决方案1】:

对象从不排序,但数组是。因此,您可以将对象数组转换为数组数组,其中包含 displayedColumns 顺序中的对象值:

 const result = data.map(obj => displayedColumns.map(key => obj[key]));

【讨论】:

  • 更准确地说,对象属性是按时间顺序排序的,即首先添加到对象中的东西将是第一个
  • @jonny 在实践中,但那不在规范中 afaik
  • 我明白了,我想从概念上假设一个对象永远不会被排序是安全的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2016-11-25
  • 1970-01-01
  • 2014-09-17
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多