【问题标题】:Sort a Javascript options value alphabetically按字母顺序对 Javascript 选项值进行排序
【发布时间】:2017-02-15 14:36:20
【问题描述】:

我有一些类似于下面的对象:

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

我正在尝试找出一种方法,按国家/地区的字母顺序对国家/地区进行排序,然后是每个国家/地区的名称,例如法国、西班牙、德国。我打算采用的方法是先将其拆分为一个数组并重新构建。

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

【问题讨论】:

  • 您错过了一个(或更多)用于排序的数组。对象实际上没有顺序。
  • 如果顺序对您来说真的很重要,请使用数组。 Javascript 对象属性并没有真正的顺序。
  • 当您将它们拆分为数组并排序时,您需要保留数组,如果没有其他原因,只能按顺序访问对象。您也可以保留对象结构,但永远不会有任何可靠的排序。
  • 是的,countries 应该定义为countries: [ {FR: { name: 'France' ... 然后我会使用lodash 进行排序

标签: javascript arrays sorting object


【解决方案1】:

我过去曾做过这样的事情来为对象带来一些秩序:

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();
});

我将名称设为小写,因为排序功能适用于 Unicode。如果排序错误,只需翻转符号即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2018-12-03
    • 2017-05-22
    • 1970-01-01
    相关资源
    最近更新 更多