Object.fromEntries() 配合 Object.entries() 和 map() 可简洁实现键值反转,适用于值唯一场景;重复值时默认保留最后映射,也可用 Map 或 reduce 兼容旧环境,并需预处理非法值以增强健壮性。

直接用 Object.fromEntries() 配合 Object.entries() 和 map() 即可完成键值反转,无需手动遍历。
基础反转:对象 → 键值互换
适用于配置字典是纯对象、且所有值都唯一、可安全作为新键的情况:
const config = {
theme: 'dark',
language: 'zh-CN',
notifications: 'enabled'
};
const reversed = Object.fromEntries(
Object.entries(config).map(([key, value]) => [value, key])
);
// { dark: 'theme', 'zh-CN': 'language', enabled: 'notifications' }
处理重复值:保留最后一个映射
若原配置中存在相同 value(如多个字段都设为 'default'),默认反转会覆盖。如需显式控制,可加逻辑去重或收集:
- 保留最后一次出现的 key(默认行为,
Object.fromEntries后续条目自动覆盖) - 改用
Map手动控制:先检查是否已存在该 value,决定跳过或合并 - 若需“一个 value 对应多个 key”,可反转为
{ value: [key1, key2] }结构
兼容旧环境:不支持 Object.fromEntries 时的替代写法
在 IE 或较老 Node.js 版本中,可用 reduce 模拟:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
const reversed = Object.entries(config).reduce((acc, [key, value]) => {
acc[value] = key;
return acc;
}, {});
注意:此方式要求 value 是字符串、数字或 symbol;若为对象或函数,会转成 [object Object] 导致冲突。
增强健壮性:过滤非法键值
实际配置中可能含 null、undefined 或非字符串键名,建议预处理:
- 跳过 value 为
null/undefined的项:.filter(([, v]) => v != null) - 确保 key 可被序列化(如排除函数、Symbol):
typeof value === 'string' || typeof value === 'number' - 对 value 转字符串再用(谨慎):
[String(value), key],但要注意0和false都转成"0"、"false"

















