假设我有一个看起来像这样的对象:
countrylist:{
regions:[
{
region: "Europe",
countries: [
{
"country":"Albania",
"href":"eu",
"locale":"en_al"
},
{
"country":"France",
"href":"eu",
"locale":"en_fr"
},
{
"country":"Ireland",
"href":"eu",
"locale":"en_ie"
}]
},
region: "Asia",
countries: [
{
"country":"China",
"href":"as",
"locale":"ch"
},
{
"country":"Japan",
"href":"as",
"locale":"jp"
},
{
"country":"Thailand",
"href":"as",
"locale":"th"
}]
}
]}
如果您可以看到整个对象,您会看到它按区域分组,并且每个区域内的国家/地区按字母顺序排序。但是,我需要填充所有国家/地区的下拉菜单,按字母顺序排列,但不按区域填充。对这些物品进行分类的最简洁方法是什么?
我最初将country字段推送到一个空数组并对其进行排序。但是,我需要保留country字段与其相应的href和locale字段之间的关系。
答案 0 :(得分:4)
初始化一个空数组,然后遍历这些区域并将所有国家/地区附加到该数组。完成后,对数组进行排序。
var countries = [];
for(var i = 0; i < countrylist.regions.length; i++)
Array.prototype.push.apply(countries, countrylist.regions[i].countries);
countries.sort(function(a, b) {
return a.country > b.country;
});
console.log(countries);
答案 1 :(得分:1)
您需要遍历您的结构并创建一系列国家/地区名称。然后,您可以对数组进行排序,然后就完成了。
var arr = [];
for(var i = 0; i < countryList.regions.length; i++){
var countries = countryList.regions[i].countries;
for(var j = 0; j < countries.length; j++){
arr.push(countries[j].country);
}
}
arr.sort();
如果您还需要其他信息,您需要的是所有国家/地区对象的平面数组,然后应用自定义排序功能:
var arr = [];
for(var i = 0; i < countryList.regions.length; i++){
var countries = countryList.regions[i].countries;
for(var j = 0; j < countries.length; j++){
arr.push(countries[j]);
}
}
arr.sort(function(xx,yy){
return xx.country < yy.country ? -1 : 1;
});