如何按District键名的字母顺序对嵌套对象进行升降序排序
核心实现原理
ES6 及更高版本的 JavaScript 中,普通对象会保留字符串类型键的插入顺序,因此我们可以先提取所有 District 名称键,完成排序后再遍历重组为新对象即可实现需求。
升序排序实现
var data = { "DistrictC": {"population": 105597}, "DistrictB": {"population": 36842}, "DistrictA": {"population": 238142} }; const sortedAsc = {}; // 提取键后默认按字母升序排序 Object.keys(data).sort().forEach(key => { sortedAsc[key] = data[key]; }); // 输出结果和预期一致 console.log(sortedAsc);
降序排序实现
const sortedDesc = {}; // 用localeCompare方法实现字母降序,比直接比较更稳妥,支持包含特殊字符的场景 Object.keys(data).sort((a, b) => b.localeCompare(a)).forEach(key => { sortedDesc[key] = data[key]; }); console.log(sortedDesc);
低版本环境兼容方案
如果需要兼容不支持对象键顺序的 ES5 及更低版本环境,可以把排序结果转为数组存储:
// 升序数组结果 const ascArray = Object.keys(data).sort().map(key => ({[key]: data[key]})); // 降序数组结果 const descArray = Object.keys(data).sort((a,b) => b.localeCompare(a)).map(key => ({[key]: data[key]}));
内容的提问来源于stack exchange,提问作者Krish
相关产品推荐
相关产品推荐

