如何按对象的值进行字母序排序?JS国家码对象排序异常问题
问题原因
- 你的排序逻辑和预期需求不匹配:当前代码是对对象的键(ISOA2国家代码)做默认字典序排序,而你给出的预期结果是按国家英文名称的字典序排序,两者排序依据完全不同,且原始列表本身就是按国家代码排好序的,所以运行后结果没有变化。
- 补充说明:ES6及之后的JS标准中,普通对象的字符串类型键会严格按照插入顺序保留,你用reduce重组对象的逻辑本身没有问题,只是排序规则写错了。
修复方案
把排序逻辑调整为按国家名称(对象的value)排序即可,修改后的代码如下:
function sortObject(obj) { return Object .entries(obj) // 按国家英文名称的字母序排序 .sort((entryA, entryB) => entryA[1].localeCompare(entryB[1])) .reduce((acc, [key, value]) => { acc[key] = value; return acc; }, {}); } // data为国家列表对象 const result = sortObject(data);
额外建议
如果需要兼容非常旧的运行环境,或者需要更稳定的有序键值对存储,你可以把最终返回值换成Map类型,Map会严格保证键的插入顺序,不受环境差异影响:
function sortObjectToMap(obj) { return Object .entries(obj) .sort((entryA, entryB) => entryA[1].localeCompare(entryB[1])) .reduce((map, [key, value]) => map.set(key, value), new Map()); }
内容的提问来源于stack exchange,提问作者Reacting
相关产品推荐
相关产品推荐

