如何在任何对象上使用ES6 Hash Map而不维护引用(即Java哈希码)

Upi*_*pio 2 javascript ecmascript-6 io.js

我一直在io.js中试验ES6 Map,并意识到我不能做到以下几点:

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

这是因为{key:"value"} === {key:"value"}为false.

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

the*_*472 6

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