我有一个国家/地区对象,其中包含一个带有国家/地区缩写的键,后跟一个带有id,name和defaultCurrency的对象。
如果我想按照国家/地区的名称对对象进行排序,我该怎么办?
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' },
}
我尝试使用以下函数将其转换为数组,但这使得每个键都有[object]
var arr = [];
for (var key in countries) {
if (countries.hasOwnProperty(key)) {
arr.push(key + '=' + countries[key]);
}
};
请注意,我不能只使用数组进行排序,需要先将整个对象转换为数组,然后再转换回对象。
答案 0 :(得分:4)
所以我从转换函数开始将obj转换为数组:
var arr = [];
for (var key in countries) {
arr.push(countries[key]);
};
然后我会对数组进行排序:
arr.sort(function(a, b) {
return b.name - a.name;
});
答案 1 :(得分: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));

答案 2 :(得分:0)
您push
- 将字符串添加到您的数组中(通过连接key
," +"和您的国家/地区对象),这就是为什么每个国家/地区都表示为& #34;对象&#34 ;;如果您想要实际的国家/地区对象,请按这些。