按字母顺序排列JavaScript对象中的项目?

按字母顺序排列JavaScript对象中的项目?,javascript,sorting,object,Javascript,Sorting,Object,假设我有一个如下所示的对象: countrylist:{ regions:[ { region: "Europe", countries: [ { "country":"Albania", "href":"eu",

假设我有一个如下所示的对象:

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字段之间的关系

初始化一个空数组,然后遍历区域并将所有国家/地区附加到该数组中。完成后,对数组进行排序

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);
var国家=[];
对于(变量i=0;ib.country;
});
控制台日志(国家);

您需要了解您的结构并创建一个国家名称数组。然后可以对数组进行排序,就完成了

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=[];
对于(变量i=0;i
如果还需要其他信息,则需要所有国家/地区对象的平面数组,然后应用自定义排序函数:

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;
});
var arr=[];
对于(变量i=0;i
我可能错了,但您是否错过了第二个区域的大括号?在模拟此虚拟对象时,我可能错过了一些内容。我一开始是这样做的,但我还需要保持href和locale字段可用。我需要像这样生成下拉列表(伪代码):[country]。如何保持新的字母数组与其各自的href和locale字段之间的关系?酷!让我试一试。注意@Matt的排序函数可能更可靠。