You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现JavaScript对象按键名进行升序与降序排序

JavaScript对象按键名字母序排序实现方案

你当前编写的代码仅完成了键名提取与排序步骤,没有按排序后的键顺序回填对应属性值,因此只能拿到排序后的键名,无法获取键关联的password等属性内容。

ES6+规范中明确了对象键的遍历顺序,只要按排序后的键顺序重新组装新对象,就能得到符合排序要求的结构,完整保留所有属性值。


按键名字母升序排列

sort()方法默认按字符串Unicode编码顺序做升序排列,实现代码如下:

const Accounts = {
  'thing': {
    password: '123',
  },
  'apple': {
    password: '456'
  },
  'zoo': {
    password: '789'
  }
}

// 提取键名并升序排序
const sortedAscKeys = Object.keys(Accounts).sort();
const sortedAscAccounts = {};
// 按排序后的键顺序回填属性值
sortedAscKeys.forEach(key => {
  sortedAscAccounts[key] = Accounts[key];
});

运行后sortedAscAccounts的键顺序为apple→thing→zoo,每个键对应的嵌套属性(如password)都会完整保留。

更简洁的现代写法可以直接用Object.entries配合Object.fromEntries实现:

const sortedAscAccounts = Object.fromEntries(
  Object.entries(Accounts).sort((a, b) => a[0].localeCompare(b[0]))
);

其中localeCompare()方法专门用于字符串比较,相比直接比较字符串能更好兼容特殊字符、多语言场景的排序逻辑。


按键名字母降序排列

降序仅需要调整sort()的比较逻辑,反转比较顺序即可:

// 提取键名并降序排序
const sortedDescKeys = Object.keys(Accounts).sort((a, b) => b.localeCompare(a));
const sortedDescAccounts = {};
// 按排序后的键顺序回填属性值
sortedDescKeys.forEach(key => {
  sortedDescAccounts[key] = Accounts[key];
});

运行后sortedDescAccounts的键顺序为zoo→thing→apple,所有属性值完整保留。

对应的简洁写法:

const sortedDescAccounts = Object.fromEntries(
  Object.entries(Accounts).sort((a, b) => b[0].localeCompare(a[0]))
);

注意事项

  • 上述实现均通过组装新对象的方式得到排序结果,不会修改原始对象数据
  • 无论属性值是基础类型还是嵌套对象、数组,都能完整保留
  • 不推荐依赖旧版JS引擎(IE11及更早版本)的对象键顺序,这类环境没有统一的键遍历规范

内容的提问来源于stack exchange,提问作者ChillingCone426

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:45:55