2016-05-13 4 views
-1

У меня проблема с сортировкой этих вложенных объектов; объект у меня есть:Как отсортировать два вложенных объекта?

Array of objects: [Object, Object] 

внутри этого массива есть два объекта, так и внутри этих объектов 1 объект: 2016-5:Object 2016-6:Object

Внутри каждой из этих двух объектов являются массивами только с 1 числа внутри:

shift0:Array[1] 
shift1:Array[1] 
shift2:Array[1] 
shift3:Array[1] 

и внутри массива только один номер как так (все с индексом 0 массива):

shift0:Array[1] -> 26 
shift1:Array[1] -> 42 
shift2:Array[1] -> 53 
shift3:Array[1] -> 31 

Я хочу, чтобы иметь возможность сортировать числа - 26, 42, 53, 31

так это выглядит, как

var source = [{'2016-5': [{shift0: [26]}, 
         {shift1: [42]}, 
         {shift2: [53]}, 
         {shift3: [31]}]}, 
      {'2016-6': [{shift0: [33]}, 
         {shift1: [15]}, 
         {shift2: [13]}, 
         {shift3: [66]}]} 
]; 

Результат я хочу должен быть:

var source = [{'2016-5': [{shift0: [26]}, 
          {shift3: [31]}, 
          {shift1: [42]}, 
          {shift2: [53]}]}, 
       {'2016-6': [{shift2: [13]}, 
          {shift1: [15]}, 
          {shift0: [33]}, 
          {shift3: [66]}]} 
    ]; 
+0

пример вы даете не является допустимым JSON: '{2016-5: {shift0: [26]}, {shift0: [42] }} '. Более того, можете ли вы добавить ожидаемый результат в этом примере? – dgiugg

ответ

1

попробовать этот

var source = [{'2016-5': [{shift0: [26]}, 
 
         {shift1: [42]}, 
 
         {shift2: [53]}, 
 
         {shift3: [31]}]}, 
 
      {'2016-6': [{shift0: [33]}, 
 
         {shift1: [15]}, 
 
         {shift2: [13]}, 
 
         {shift3: [66]}]} 
 
]; 
 

 
source.forEach(function(obj){ 
 
    Object.keys(obj).forEach(function(key){ 
 
     console.log(obj[key]); 
 
     obj[key].sort(function(a,b){ 
 
     return a[ Object.keys(a)[0] ] - b[ Object.keys(b)[0] ] ; 
 
     }) 
 
    }); 
 
}); 
 

 
document.body.innerHTML += JSON.stringify(source, 0, 4);

+0

спасибо за ur ответ im get 'TypeError: obj [key] .sort не является функцией', но я буду отлаживать код, я думаю, что проблема на моем конце. :) – Dimitar

+0

мой var немного отличается от того, что я написал, и этот код его не работает, и я очень плохо разбираюсь в вещах: '[{" 2016-5 ": {" shift0 ": [26]," shift1 ": [42], "SHIFT2": [53], "shift3": [31]}}, { "2016-6": { "shift0": [47], "SHIFT1": [26], "SHIFT2 »: [58],« shift3 »: [52],« shift4 »: [22]}}]' – Dimitar

+0

@ ДимитърКлатуров Это совершенно другое. В вашем вопросе '2016-5' есть значение массива, но в вашем комментарии у него есть объект. Это полностью аннулирует мои и другие ответы. – gurvinder372

0

JSON вы указали недействительным, считая свой JSON следующим:

var source = [{'2016-5': [{shift0: [26]}, 
          {shift0: [42]}, 
          {shift0: [53]}, 
          {shift0: [31]}]}, 
       {'2016-6': [{shift0: [33]}, 
          {shift0: [15]}, 
          {shift0: [13]}, 
          {shift0: [66]}]} 
]; 

Тогда вы можете попробовать:

var result = 
     source.map(function(item){ 
        Object.keys(item) 
          .map(function(key){ 
           item[key] = 
             item[key].sort(function(p, c){ 
              return p.shift0[0]-c.shift0[0]; 
             }); 
          }); 
        return item; 
     }); 
+0

может у вас отредактировать свой ответ, когда я отредактировал свой вопрос, и я действительно ошибаюсь в json, который у меня есть, и у json есть разные значения shift0, shift1, shift2 ... до определенного числа (я не знаю, сколько сдвигов там будет). благодаря! – Dimitar

Смежные вопросы