我有类似于下面的以下对象:
EUR: {
name: 'Europe',
countries: {
FR: {
name: 'France',
cities: {}
},
DE: {
name: 'Germany',
cities: {}
},
ES: {
name: 'Spain',
cities: {}
}
}
}
我试图找出一种方法,按国家/地区的字母顺序对国家进行排序,然后是每个国家的名称,例如法国,西班牙,德国。我要采取的方法是将其拆分为数组First并重建。
我想知道是否有人有任何我想念的不同方法可以帮助我吗?
答案 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。如果按错误顺序排序,只需翻转标志。