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

如何按值升序排序JavaScript键值对对象

解决JavaScript对象按值升序排序的问题

嘿,我来帮你搞定这个对象排序的需求!首先得明确一点:JavaScript里的普通对象(就像你定义的map),虽然ES6+开始会保留键的插入顺序,但没法直接对对象的属性按值排序,我们得通过「转数组→排序→转对象」的流程来实现。

具体实现步骤

这里给你两种常用的实现方式,适配不同场景:

方式一:现代环境(ES2017+)简洁写法

利用Object.entries()、Array.sort()和Object.fromEntries()这几个API快速完成:

const map = {};
map['test.truck'] = 10;
map['test.domain'] = -20;
map['test.institute'] = 0;
map['test.vehicle'] = 40;
map['test.lan'] = 1;
map['test.wifi'] = 9;

// 1. 将对象转为[key, value]格式的数组
const entries = Object.entries(map);
// 2. 按数组中的value(即每个子数组的第2项)升序排序
const sortedEntries = entries.sort((a, b) => a[1] - b[1]);
// 3. 将排序后的数组转回对象
const sortedMap = Object.fromEntries(sortedEntries);

console.log(sortedMap);
// 输出结果完全符合你的需求:
// {
//   'test.domain': -20,
//   'test.institute': 0,
//   'test.lan': 1,
//   'test.wifi': 9,
//   'test.truck': 10,
//   'test.vehicle': 40
// }

方式二:兼容旧环境的写法

如果需要支持不支持ES2017的旧环境,可以用Object.keys()手动构建数组,再循环生成排序后的对象:

const map = {};
map['test.truck'] = 10;
map['test.domain'] = -20;
map['test.institute'] = 0;
map['test.vehicle'] = 40;
map['test.lan'] = 1;
map['test.wifi'] = 9;

// 1. 获取对象所有键,转为[key, value]数组
const entries = Object.keys(map).map(key => [key, map[key]]);
// 2. 按值升序排序
const sortedEntries = entries.sort((a, b) => a[1] - b[1]);
// 3. 手动循环生成排序后的对象
const sortedMap = {};
sortedEntries.forEach(([key, value]) => {
  sortedMap[key] = value;
});

console.log(sortedMap);

额外建议:用Map保证有序性

如果你需要更严谨的有序键值对结构,推荐使用Map——它本身就是严格按照插入顺序存储的,排序后直接生成新Map即可:

const sortedMap = new Map(sortedEntries);

// 遍历验证顺序
sortedMap.forEach((value, key) => {
  console.log(`${key}: ${value}`);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:00:50