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

如何在JavaScript中实现键与值的双向映射?

原生JavaScript实现双向映射查找的最佳方案

针对你给出的映射 const somemap = {"a": 1, "b": 2, "c": 3};,要实现传入键返回值、传入值返回键的双向查找,最佳方式是预构建反向映射对象,利用原生API实现O(1)时间复杂度的快速查找。

具体实现步骤

  1. 构建反向映射
    利用Object.entries()将原映射转为键值对数组,再反转键值后用Object.fromEntries()生成反向映射:

    const somemap = {"a": 1, "b": 2, "c": 3};
    // 生成值→键的反向映射
    const reverseMap = Object.fromEntries(
      Object.entries(somemap).map(([key, value]) => [value, key])
    );
    
  2. 编写双向查找函数
    检查输入是否存在于原映射或反向映射中,返回对应结果:

    function getBiDirectionalValue(input) {
      // 先查键→值
      if (input in somemap) {
        return somemap[input];
      }
      // 再查值→键
      if (input in reverseMap) {
        return reverseMap[input];
      }
      // 处理输入不存在的情况(可选)
      return undefined;
    }
    
  3. 使用示例

    console.log(getBiDirectionalValue('a')); // 输出: 1
    console.log(getBiDirectionalValue(1));  // 输出: 'a'
    console.log(getBiDirectionalValue('b')); // 输出: 2
    console.log(getBiDirectionalValue(3));  // 输出: 'c'
    

进阶封装(复用性更强)

如果需要多次使用双向映射,可以封装成工厂函数,避免重复构建反向映射:

function createBiMap(originalMap) {
  const reverseMap = Object.fromEntries(
    Object.entries(originalMap).map(([k, v]) => [v, k])
  );
  return (input) => originalMap[input] ?? reverseMap[input];
}

// 使用
const somemap = {"a": 1, "b": 2, "c": 3};
const getBiValue = createBiMap(somemap);
console.log(getBiValue('c')); // 3
console.log(getBiValue(2));   // 'b'

为什么这是最佳方式?

  • 性能最优:预构建反向映射后,每次查找都是O(1)的哈希表查找,远快于动态遍历映射的O(n)方式。
  • 代码简洁:基于ES6+原生API实现,无需额外依赖,兼容性覆盖现代浏览器和Node.js环境。
  • 可维护性好:反向映射只需构建一次,后续查找逻辑清晰。

注意:该方案的前提是原映射中的值是唯一的。如果存在重复值,反向映射会保留最后一个值对应的键;若需处理重复值场景,需将反向映射的对应值改为数组存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:25:34