2012-04-27 3 views
0

У меня есть объект JSON в следующем формате:Сортировать комплекс JSON на основе конкретного ключа

{ 
    items:{ 
     nestedObj:{ 
      position:3 
     }, 
     nestedObj2:{ 
      position:1 
     }, 
     nestedObj3:{ 
      position:2, 
      items:{ 
       dblNestedObj:{ 
        position:2 
       }, 
       dblNestedObj2:{ 
        position:3 
       }, 
       dblNestedObj3:{ 
        position:1 
       } 
      } 
     } 
    } 
} 

Я пытающийся сортировать каждый уровень вложенного объекта по атрибуту позиции. Я могу рекурсивно перебирать объект, но я не знаю, с чего начать его сортировку ...

ответ

1

К сожалению, не так-то просто использовать метод sort, как если бы у вас был массив. Итак, давайте построим массив:

var tmp = [], x; 
for(x in obj.items) { // assuming your main object is called obj 
    tmp.push([x,obj.items[x].position]); 
    // here we add a pair to the array, holding the key and the value 
} 

// now we can use sort() 
tmp.sort(function(a,b) {return a[1]-b[1];}); // sort by the value 

// and now apply the sort order to the object 
var neworder = {}, l = tmp.length, i; 
for(i=0; i<l; i++) neworder[tmp[i][0]] = obj.items[tmp[i][0]]; 
obj.items = neworder; 
Смежные вопросы