如何在不维护引用的情况下在对象上使用 ES6 哈希映射(即 Java 哈希码)

How to use ES6 Hash Map on any object without maintaing a reference (I.e. Java hashcode)

我一直在 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"} 是假的。

我需要能够使用一个对象作为键,但不需要 ACTUAL 对象来查找值,就像 java HashMap 使用 hashcode 和 equals 的方式一样。这可能吗?

  • 如果缺少对象标识是由于序列化-反序列化往返造成的,只需给它们一个唯一的 ID,并使用该 ID 作为密钥
  • 如果您可以确定其余属性依赖于该子集或与您的操作无关,则根据其属性的子集计算键
  • 实现您自己的散列映射和对象散列。这对于主机对象来说可能会很棘手,但对于 JSON 兼容的数据
  • 应该相当简单
  • JSON-在每次获取或设置之前进行编码。它的效率很低,并且只适用于 JSON-可序列化的对象。但比之前的选项更容易实施