2015-11-06 4 views
1

Как отсортировать объекты по возрасту?Как отсортировать многомерный объект в JavaScript

У меня есть следующие структуры объекта

{ 
    "men": { 
     "20114": { 
      "id": "20114", 
      "name": "Peter", 
      "age": "21" 
     }, 
     "28957": { 
      "id": "28957", 
      "name": "Paul", 
      "age": "20" 
     } 
    }, 
    "women": { 
     "8957": { 
      "id": "8957", 
      "name": "Rose", 
      "age": "24" 
     }, 
     "2178": { 
      "id": "2178", 
      "name": "Sara", 
      "age": "22" 
     } 
    }, 
} 

Я знаю, что я могу сортировать массивы, как этот

groups.sort(function(a, b) { 
    return b.age - a.age; 
}); 

, но как это сделать с объектами?

+8

Вы не можете, клавиши объектов не имеют определенного порядка. Вам либо нужно передать объекты в массив, либо создать новый массив с ключами и отсортировать их на основе данных объекта. – juvian

+0

Как сказал @juvian, объекты не имеют для них определенного порядка. Таким образом, вы захотите изменить «мужчин» и «женщин» в массив объектов, а затем отсортировать с помощью своего метода выше. –

+0

Я согласен с @juvian. Вместо этого вы можете иметь свойство «gender» и создать массив людей. – Jaco

ответ

0
function sortfunc(prop){ 
       return function(obj1,obj2){ 
       var val1 = obj1[prop]; 
       var val2 = obj2[prop]; 

      return val1 - val2; 

     }; 
} 

groups.sort(sortfunc(prop)); 

проход prop в качестве имени свойства

+2

Пожалуйста, прочитайте вопрос, опять же, OP знает, как сортировать массивы. У них есть этот метод уже в их ответе. –

0

Было бы намного проще сортировать данные, если вы могли бы изменить структуру модели JSON ниже:

var data = [ 
 
    { 
 
     "id": "20114", 
 
     "name": "Peter", 
 
     "age": "21", 
 
     "gender": "men" 
 
    }, 
 
    { 
 
     "id": "28957", 
 
     "name": "Paul", 
 
     "age": "20", 
 
     "gender": "men" 
 
    }, 
 
    { 
 
     "id": "8957", 
 
     "name": "Rose", 
 
     "age": "24", 
 
     "gender": "women" 
 
    }, 
 
    { 
 
     "id": "2178", 
 
     "name": "Sara", 
 
     "age": "22", 
 
     "gender": "women" 
 
    } 
 
] 
 

 
data.sort(function(a, b) { 
 
    return parseFloat(a.age) - parseFloat(b.age); 
 
}); 
 

 
data.sort() 
 

 

 
document.write(JSON.stringify(data))

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