【问题标题】:How to use ES6 Hash Map on any object without maintaing a reference (I.e. Java hashcode)如何在不维护引用的情况下在任何对象上使用 ES6 哈希映射(在 Java 哈希码中)
【发布时间】:2015-02-06 02:34:04
【问题描述】:

我一直在 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 如何使用哈希码和等于。这可能吗?

【问题讨论】:

  • 为什么不使用 JSON.parse({key:"value"}) 作为你的键?
  • 如果你准备好使用 Immutable.js,你可以使用 Record 作为不可变 Map 的复杂键。 immutable-js.github.io/immutable-js

标签: javascript ecmascript-6 io.js


【解决方案1】:
  • 如果缺少对象身份是由于序列化-反序列化往返,只需给他们一个唯一的 ID,该 ID 可以在该 ID 中继续存在,并将该 ID 用作键
  • 如果您可以确定其余属性依赖于该子集或与您的操作无关,则从其属性的子集计算键
  • 实现您自己的哈希映射和对象哈希。这对于主机对象可能会很棘手,但对于与 JSON 兼容的数据应该相当简单
  • 在每次获取或设置之前进行 JSON 编码。它的效率非常低,并且仅适用于 JSON 可序列化对象。但比上一个选项更易于实施

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 2016-07-09
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    相关资源
    最近更新 更多