TypeScript:地图有键(对象)不起作用

TypeScript: Map has key (object) not working

提问人:1Z10 提问时间:5/10/2018 更新时间:5/14/2018 访问量:20959

问:

我在检查地图是否已经有一个对象作为键时遇到了一些麻烦。

例如

const myMap: Map<MyObject1, MyObject2> = new Map<MyObject1, MyObject2>();

我还在 MyObject1 类中定义了一个等于函数

equals(other: ThreatAgentMgm): boolean {
    return other.id === this.id;
}

但总是假的。 我读到has方法基于===运算符,我应该在MyObject1类中定义其他内容吗?myMap.has(myObject1)

TypeScript 字典 相等

评论

0赞 jcalz 5/10/2018
JavaScript 在比较对象是否相等时不使用任何方法。你为什么不把你的地图键作为字段,然后做呢?equals()idMyObject1myMap.has(myObject1.id)
2赞 jcalz 5/10/2018
如何自定义 JavaScript Set 的对象相等性,它可能涉及 and not 但涉及相同的问题:键相等SetMap
0赞 1Z10 5/10/2018
我需要将此映射按原样传递给另一个现有的 Java API,后者将解析此 JSON。所以你是说不可能使用一个对象作为地图的键?我说得对吗?
1赞 jcalz 5/10/2018
MapJavaScript 与 Java 不同,两者都不是 JSON。🤷‍♂️Map
1赞 Tezra 10/24/2019
映射中的对象仅是相同的实例匹配项。developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/......

答:

8赞 1Z10 5/14/2018 #1

由于最终每个 JSON 对象都只是一个字符串,因此我最终使用 JSON.stringify(myObject) 作为 Map 的键,并使用几个值(MyObject1、MyObject2)作为实际值。这样,我就能够在时间 O(1) 内获得所需的值,同时保持键对象可用,而无需再次解析 JSON 或最糟糕的情况,再次从数据库中检索它。