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

如何访问JS Map中以对象为键对应的存储值

问题原因

Map 对键的匹配采用 SameValueZero 相等比较规则,对象属于引用类型数据,你代码中 set 操作传入的 {a: 1} 和 get 操作传入的 {a: 1} 是两个独立的对象,指向不同的内存地址,会被判定为不相等,因此无法匹配到对应值,返回 undefined。

解决方案
  • 方法1:复用同一对象引用作为键
    提前将作为键的对象赋值给变量,set 和 get 操作都使用该变量即可匹配成功:
let map1 = new Map();
const objKey = {a: 1};
map1.set(objKey, "valueforobject");
console.log(map1.get(objKey)); // 输出:valueforobject
  • 方法2:序列化对象为字符串作为键
    如果业务场景需要通过对象内容匹配,可以将对象序列化为字符串作为键,字符串属于基础类型,内容一致即可匹配成功:

注意:该方法仅适用于可被JSON序列化的对象,若对象包含函数、Symbol、循环引用等无法序列化的内容会出现匹配异常,同时需注意对象属性顺序会影响序列化结果。

let map1 = new Map();
map1.set(JSON.stringify({a: 1}), "valueforobject");
console.log(map1.get(JSON.stringify({a: 1}))); // 输出:valueforobject
  • 方法3:遍历Map自定义匹配规则
    如果没有提前保留对象引用、且对象无法直接序列化,可以遍历Map的键值对,自定义匹配规则查找对应值:
let map1 = new Map();
map1.set({a: 1}, "valueforobject");

let targetValue;
for (const [key, value] of map1.entries()) {
  // 自定义匹配逻辑,此处示例匹配a属性等于1的对象
  if (key.a === 1) {
    targetValue = value;
    break;
  }
}
console.log(targetValue); // 输出:valueforobject

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 09:21:02