在Javascript中,如何使用对象作为哈希映射的键

In Javascript, how to use object as the key of a hashmap?

本文关键字:哈希 映射 对象 Javascript 何使用      更新时间:2023-09-26

这是 REPL 中的结果

>>a1={1:2}
Object {1: 2}
>>a2={1:4}
Object {1: 4}
>>c={}
Object {}
>>c[a1]=2
2
>>c[a2]
2

可以看出,a1a2是不同的对象。但是,c[a1]c[a2]将得到相同的结果。有没有办法使用对象作为哈希图的键?

只有字符串可以用作对象键。你可以走黑客路线,使用JSON.stringify()将对象变成字符串,但你最好的选择是使用实际的哈希图。

您可以使用一个自定义实现,或者如果您的目标环境支持它,请使用 WeakMap。

还有一个用于 WeakMap 的填充程序,您可以在尚不支持它的环境中使用:

https://github.com/polymer/WeakMap

您可以将对象转换为字符串。javascript 对象中的键类型应该是字符串

属性名称必须是字符串。这意味着非字符串对象 不能用作对象中的键。任何非字符串对象,包括 一个数字,通过 toString 方法类型转换为字符串。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors

您可以在上面的链接中找到相同的示例。

c[<some_func_to_convert_obj_to_string(a1)>]=2
因此,如果要将对象

用作键,则需要将对象转换为唯一的字符串..并且对于将对象转换为字符串有很多答案。 正如Steven Wexler指出的那样,JSON.stringify是非确定性的,最好不要使用它。我不会再次复制这些功能,因为有一个专门的 SO 问题。