【发布时间】:2014-02-16 00:59:32
【问题描述】:
我有一个接收 JS 对象列表作为参数的函数。我需要将有关这些对象的信息存储在私有变量中以供将来参考。我不想将属性填充到对象本身中,我只想将其保留在字典中。我需要能够在亚线性时间内查找对象的元数据。
为此,我需要一个 hash 函数,这样,对于任意两个对象 o1 和 o2,
hash(o1) !== hash(o2) 每当o1 !== o2。
这种散列函数的一个完美例子是对象的内存地址,但我认为 JS 不会暴露这一点。有什么办法吗?
【问题讨论】:
-
你可以直接检查引用相等
o1 === o2 -
在 JS 中,表达式
{} === {}的计算结果为false。您是否希望{}和{}哈希到相同的值? -
Google Closure 库只是为对象添加了一个独特的属性:docs.closure-library.googlecode.com/git/…。
-
@masonk 然后自己存储对象并使用
===。它不会很快,但我不认为你可以在不接触物体的情况下做得更好。 -
当 jQuery 试图为
.data()解决这个问题时,它会向源对象添加一个唯一的字符串属性,作为字典中的查找键。然后,如果有人给您源对象,您可以检索查找键,然后在您的字典中查找它以获取并行数据。对象引用本身不能被字符串化为唯一,因此您不能将其用作键。
标签: javascript hash