Сортировать многослойный объект в Javascript - PullRequest
0 голосов
/ 07 июня 2018

Я пробовал читать на SO и в других местах, но смог найти только объекты одного уровня и не смог сделать это для многоуровневых объектов.то есть: возвращать 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-value , sorting-javascript-object-by-property-value 3 среди прочих

1 Ответ

0 голосов
/ 07 июня 2018

Решается сначала настройкой сравнения, затем сортировкой, как показано ниже, затем присвоением исходному объекту

 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);
...