2016-02-10 6 views
-1

У меня есть объект стран, который состоит из ключа с аббревиатурой страны, за которым следует объект с его идентификатором, именем и значением по умолчанию.Сортировка объекта Javascript по значению свойства

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

var countries= { 
    AD: { id: 'AD', name: 'Andorra', defaultCurrency: 'EUR' }, 
    AE: { id: 'AE', name: 'United Arab Emirates', defaultCurrency: 'AED' }, 
    BT: { id: 'BT', name: 'Bhutan', defaultCurrency: 'USD' }, 
    BW: { id: 'BW', name: 'Botswana', defaultCurrency: 'USD' }, 
    BZ: { id: 'BZ', name: 'Belize', defaultCurrency: 'BZD' }, 
    CA: { id: 'CA', name: 'Canada', defaultCurrency: 'CAD' }, 
    CC: { id: 'CC', name: 'Cocos (Keeling) Islands', defaultCurency: 'XAF' }, 
    CH: { id: 'CH', name: 'Switzerland', defaultCurrency: 'CHF' }, 
    CI: { id: 'CI', name: 'Côte d\'Ivoire', defaultCurrency: 'USD' }, 
    CK: { id: 'CK', name: 'Cook Islands', defaultCurrency: 'NZD' }, 
} 

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

var arr = []; 
for (var key in countries) { 
    if (countries.hasOwnProperty(key)) { 
     arr.push(key + '=' + countries[key]); 
    } 
}; 

Обратите внимание, что я не могу просто применить сортировку с использованием массива, и нужно сначала преобразовать весь объект в массив, а затем преобразовать обратно в объект.

+0

FYI, точка с запятой после '}' из цикла не имеет смысла - это было бы лучше поместить после '}' 'из стран вара = {...} ' – ThiefMaster

+0

Возможный дубликат [Сортировка массива объектов JavaScript] (http://stackoverflow.com/questions/979256/sorting-an-array-of-javascript-objects) – rambossa

+0

Как это дубликат? Я выполнил свою должную осмотрительность и выполнил поиск в stackoverflow, прочитал этот вопрос раньше, и это не решило мою проблему. Этот вопрос включает массив. Mine - это объект с ключевыми значениями и объектами, вложенными в ... – alchuang

ответ

2

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

var countries = { 
 
    AD: { id: 'AD', name: 'Andorra', defaultCurrency: 'EUR' }, 
 
    AE: { id: 'AE', name: 'United Arab Emirates', defaultCurrency: 'AED' }, 
 
    BT: { id: 'BT', name: 'Bhutan', defaultCurrency: 'USD' }, 
 
    BW: { id: 'BW', name: 'Botswana', defaultCurrency: 'USD' }, 
 
    BZ: { id: 'BZ', name: 'Belize', defaultCurrency: 'BZD' }, 
 
    CA: { id: 'CA', name: 'Canada', defaultCurrency: 'CAD' }, 
 
    CC: { id: 'CC', name: 'Cocos (Keeling) Islands', defaultCurency: 'XAF'}, 
 
    CH: { id: 'CH', name: 'Switzerland', defaultCurrency: 'CHF' }, 
 
    CI: { id: 'CI', name: 'Côte d\'Ivoire', defaultCurrency: 'USD' }, 
 
    CK: { id: 'CK', name: 'Cook Islands', defaultCurrency: 'NZD' }, 
 
}; 
 

 
var countryList = []; 
 

 
for(var isoCode in countries) { 
 
    if(countries.hasOwnProperty(isoCode)) { 
 
    countryList.push(countries[isoCode]); 
 
    } 
 
} 
 

 
countryList.sort(function(country1, country2) { 
 
    return country1.name > country2.name; 
 
}); 
 

 
document.write(JSON.stringify(countryList));

0

Вы вставляете строки в ваш массив (путем объединения key, «+» и объекта вашей страны), поэтому каждая страна представлена ​​как «объект»; если вы хотите, чтобы реальные объекты страны, просто нажмите на них.

4

Так что я хотел бы начать с функцией преобразования, чтобы превратить OBJ в массив:

var arr = []; 
for (var key in countries) { 
    arr.push(countries[key]); 
}; 

Тогда я бы отсортировать массив:

arr.sort(function(a, b) { 
    return b.name - a.name; 
}); 
+0

Это 2 ошибки: 1) автор попросил конвертировать по названию страны (не по стране код ISO2). Следовательно, ваш код не будет работать, например. Switherland с кодом ISO2 ch. 2) Вы создали новый объект, обернутый вокруг исходного объекта страны. Зачем? –

+0

Спасибо, Александр! Я исправил первый. Второй, который я сделал, потому что по какой-то причине я предположил, что OP захочет сохранить как код (в разделе 'info'), так и сам ключ свойства. Теперь, когда я вижу это, они идентичны. Я тоже это исправлю. –

+0

Теперь решение почти идентично моему. –

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