如何在不维护引用的情况下在对象上使用 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-可序列化的对象。但比之前的选项更容易实施
我一直在 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-可序列化的对象。但比之前的选项更容易实施