按字母顺序排序Javascript选项值

时间:2017-02-15 14:36:21

标签: javascript arrays sorting object

我有类似于下面的以下对象:

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

我试图找出一种方法,按国家/地区的字母顺序对国家进行排序,然后是每个国家的名称,例如法国,西班牙,德国。我要采取的方法是将其拆分为数组First并重建。

我想知道是否有人有任何我想念的不同方法可以帮助我吗?

1 个答案:

答案 0 :(得分: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键排序。

编辑:我实际上可能会显示迭代来对它们进行排序,对吗?

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

我将名称设为小写,因为sort函数适用于Unicode。如果按错误顺序排序,只需翻转标志。