gpt4 book ai didi

javascript - 如何在 ES6 Map 中获得深度相等的键?替代使用复杂对象作为 ES6 映射键?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:08:16 25 4
gpt4 key购买 nike

这里是一些示例 Javascript (ES6) 代码,它们并不像人们凭直觉想象的那样。

const exampleMap = new Map([[{a: 1}, 2]]);
console.log(exampleMap.get({a: 1}));

事实证明,这会打印出 undefined。为什么?推理包含在 this StackOverflow answer 中。 .每the MDN entry for Map , Map 使用 === 进行键相等。并且,根据 the MDN entry for === , Object 通过引用相等性进行比较。

一切都很好。它完全按照文档所说的去做。不幸的是,上面的代码试图做的事情非常有用,即使它不是规范中的实际行为。

我如何使用 Map,或者我应该使用什么来代替 Map,以获得键值查找,其中键通过对象深度相等语义进行比较?

最佳答案

您可以创建自己的函数,在其中传递要获取其值的映射 (m) 以及要在其中搜索的 key map 。然后你可以将你的键字符串化,这样你就可以在你的 map 中搜索键并将它们与这个字符串化的键进行比较

const exampleMap = new Map([[{a: 1}, 2]]);

const getMapVal = (m, key) => {
const strKey = JSON.stringify(key);
return m.get(Array.from(m.keys()).find((k) => JSON.stringify(k) === strKey));
}

console.log(getMapVal(exampleMap, {a: 1})); // 2 (gives undefined if key doesn't exists)

关于javascript - 如何在 ES6 Map 中获得深度相等的键?替代使用复杂对象作为 ES6 映射键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57262315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com