在Javascript中,如何使用object作为hashmap的键?
这是REPL中的结果在Javascript中,如何使用object作为hashmap的键?,javascript,web,Javascript,Web,这是REPL中的结果 >>a1={1:2} Object {1: 2} >>a2={1:4} Object {1: 4} >>c={} Object {} >>c[a1]=2 2 >>c[a2] 2 可以看出,a1和a2是不同的对象。但是,c[a1]和c[a2]将得到相同的结果。有没有办法将object用作hashmap的键?您可以将object转换为字符串。javascript对象中的键类型应为字符串 属性名称必须是字符串。这意味着
>>a1={1:2}
Object {1: 2}
>>a2={1:4}
Object {1: 4}
>>c={}
Object {}
>>c[a1]=2
2
>>c[a2]
2
可以看出,
a1
和a2
是不同的对象。但是,c[a1]
和c[a2]
将得到相同的结果。有没有办法将object用作hashmap的键?您可以将object转换为字符串。javascript对象中的键类型应为字符串
属性名称必须是字符串。这意味着非字符串对象
不能用作对象中的键。任何非字符串对象,包括
数字,通过toString方法键入到字符串中
您可以在上面的链接中找到相同的示例
c[<some_func_to_convert_obj_to_string(a1)>]=2
c[]=2
因此,如果要将该对象用作键,则需要将该对象转换为唯一字符串。。这里有很多答案。正如Steven Wexler指出的,JSON.stringify是不确定的,最好不要使用它。我不会再次复制这些函数,因为有一个专门的SO问题 只有字符串可以用作对象键。您可以使用hacky路径,使用
JSON.stringify()
将对象转换为字符串,但最好使用实际的hashmap
您可以使用它的自定义实现,或者如果您的目标环境支持它,则可以使用
还有一个用于WeakMap的垫片,您可以在尚不支持它的环境中使用:
使用JSON.stringify创建密钥可能很危险,因为JSON.stringify不是确定性的。@StevenWexler或OP希望使用对象作为密钥。。。应该将其转换为字符串,以便该字符串仅映射到此对象。。。下面的语句有一个SO-qsn:
JSON.stringify(myObj)==JSON.stringify(myObj)
并不总是正确的,因为JSON.stringify不是确定性的。因此,可以使用JSON.stringify从对象创建字符串。但把这些字符串用作键是危险的。@StevenWexler Ohh ohk。。。我不是说他应该使用JSON.stringify。。。如前所述,除了JSON.stringify之外,还有其他方法可以将对象转换为唯一字符串,并且有一个SO qsn用于此…我希望此链接可以帮助您