如何在任何对象上使用ES6哈希映射而无需维护引用(即Java哈希码)?

6

我一直在io.js中尝试使用ES6 Map,并意识到我无法做到以下操作:

var map = new Map()
map.set( {key:"value"}, "some string");
map.get( {key:"value"} ); // undefined. I want "some string"

这是因为 {key:"value"} === {key:"value"} 是错误的。

我需要能够使用对象作为键,但不需要实际对象来查找值,就像Java HashMap使用哈希码和equals一样。这可能吗?


为什么不要将JSON.parse({key:"value"})作为您的键? - Gaston Sanchez
如果你准备好全力以赴使用Immutable.js,你可以将Record作为不可变Map的复杂键。 - rpggio
1个回答

8
  • 如果缺少对象标识是由于序列化 - 反序列化往返导致的,只需为它们提供一个在此过程中保留的唯一ID,并将该ID用作键。
  • 如果您可以确定其余属性要么依赖于该子集,要么与您的操作无关,则可以从其属性的子集计算出一个键。
  • 实现自己的哈希映射和对象哈希。这可能会涉及到主机对象,但对于JSON兼容数据而言应该相当简单易懂。
  • 在每次获取或设置之前进行JSON编码。虽然效率不高且仅适用于可JSON序列化的对象,但比前面的选项更易于实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接