2017-02-15 7 views
0

У меня есть что-то похожее на следующий объект ниже:Сортировать значение Javascript опции по алфавиту

EUR: { name: 'Europe', countries: { FR: { name: 'France', cities: {} }, DE: { name: 'Germany', cities: {} }, ES: { name: 'Spain', cities: {} } } }

Я пытаюсь выяснить способ сортировки стран в алфавитном порядке по странам, то название каждой страны например, Франции, Испании, Германии. Подход, который я собирался взять, разбил это на массив First и перестроил.

Мне было интересно, есть ли у кого-нибудь разные подходы, которые мне не хватает, они могут мне помочь?

+6

Вы пропустите (или больше) массив/с для сортировки. объекты фактически не имеют порядка. –

+0

Если заказ действительно имеет значение для вас, используйте массив. Свойства объектов Javascript на самом деле не имеют порядка. – bobjoe

+0

Ans: http://stackoverflow.com/questions/17684921/sort-json-object-in-javascript –

ответ

0

Я сделал что-то подобное в прошлом, чтобы навести порядок на объекте:

EUR: { 
    name: 'Europe', 
    countries: { 
     FR: { 
      name: 'France', 
      cities: {} 
     }, 
     DE: { 
      name: 'Germany', 
      cities: {} 
     }, 
     ES: { 
      name: 'Spain', 
      cities: {} 
     }, 
     order : ['DE', 'ES', 'FR'] 
    } 
} 

Каждый объект будет получать order ключ, который представляет собой массив ключей для этого объекта. Затем, когда вы перебираете объект, вы можете сохранить порядок, используя ключ order. Недостатком является то, что вам нужно не только поддерживать объект (добавлять, обновлять, удалять), но также и ключ order.

Хотя я настоятельно рекомендую на самом деле создавать массив объектов, а не вложенных объектов, поскольку ключи объектов не имеют порядка.

EUR: { 
    name: 'Europe', 
    countries: [{ 
      name: 'France', 
      abbr: 'FR', 
      cities: {} 
     },{ 
      name: 'Germany', 
      abbr: 'DE', 
      cities: {} 
     },{ 
      name: 'Spain', 
      abbr: 'ES', 
      cities: {} 
     }] 
} 

Тогда можно перебирать EUR.countries массив и отсортировать либо .name ключ или ключ .abbr.

EDIT: Я должен, вероятно, фактически показать итерацию, чтобы отсортировать их, не так ли?

var sorted = EUR.countries.sort(function(a, b){ 
    return a.name.toLowerCase() > b.name.toLowerCase(); 
}); 

Я делаю имена строчными буквами, потому что функция сортировки работает с Unicode. Если он сортируется в неправильном порядке, просто переверните знак.