在Javascript中对多层对象进行排序

时间:2018-06-07 11:13:48

标签: javascript sorting ecmascript-6 ecmascript-5

我尝试过在SO和其他地方阅读,但只能找到单级对象,并且无法使其适用于多级对象。 ie:return tableData按值降序排序。

我在调试和控制台视图中附加了以下对象:

enter image description here enter image description here

这是实际的对象:

"[{"name":"Sepitomo",
"years":[  
   {  
      "year":"Italy",
      "value":25.79
   },
   {  
      "year":"Spain",
      "value":30.68
   },
   {  
      "year":"France",
      "value":18.31
   },
   {  
      "year":"Poland",
      "value":9.45
   },
   {  
      "year":"Portugal",
      "value":6.72
   },
   {  
      "year":"Switzerland",
      "value":4.05
   },
   {  
      "year":"Romania",
      "value":3.95
   },
   {  
      "year":"[Cash]",
      "value":3.2
   },
   {  
      "year":"Belgium",
      "value":3.18
   },
   {  
      "year":"United Kingdom",
      "value":2.94
   },
   {  
      "year":"Ireland",
      "value":2.01
   },
   {  
      "year":"Germany",
      "value":0.98
   }
]
},
{  
"name":"Benchmark",
"years":[  
   {  
      "year":"Italy"
   },
   {  
      "year":"Spain"
   },
   {  
      "year":"France"
   },
   {  
      "year":"Poland"
   },
   {  
      "year":"Portugal"
   },
   {  
      "year":"Switzerland"
   },
   {  
      "year":"Romania"
   },
   {  
      "year":"[Cash]"
   },
   {  
      "year":"Belgium"
   },
   {  
      "year":"United Kingdom"
   },
   {  
      "year":"Ireland"
   },
   {  
      "year":"Germany"
   }
]
}
]"

我需要返回在值上排序的tableData对象,并返回其他对象,因为它们在同一个结构中(还返回其他未排序的部分)。

我尝试了sorting-object-properties-based-on-valuesorting-javascript-object-by-property-value 3

1 个答案:

答案 0 :(得分:0)

首先设置比较然后排序如下,然后分配给原始对象

 let temp2 = tableData[0].years;

 function compareValues(a, b) {
   if (a.value > b.value)
          return -1;
   if (a.value < b.value)
          return 1;
   return 0;
 }


tableData[0].years = temp2.sort(compareValues);