在Javascript中,如何使用对象作为哈希映射的键
In Javascript, how to use object as the key of a hashmap?
这是 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]
将得到相同的结果。有没有办法使用对象作为哈希图的键?
只有字符串可以用作对象键。你可以走黑客路线,使用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 问题。
相关文章:
- 根据选项卡内部的文本链接中的哈希ID动态选择jqueryUI选项卡
- Steam Web API:I'我不知道该如何处理这个看起来像哈希的url来生成图像
- AngularJS:获取链接中没有哈希的查询字符串值
- 在Javascript中,如何使用对象作为哈希映射的键
- 按值对映射/哈希进行排序,保留键
- 从两个数组创建/合并对象哈希映射
- 从作为哈希映射中的键的对象中检索值
- javascript哈希映射中的QML集成错误
- 使用对象哈希映射上的索引获取值
- 如何在Javascript中初始化带有整数键的静态值哈希映射
- 我想将值动态插入哈希映射
- 如何创建哈希映射,以便我可以在javascript中循环或删除
- Javascript哈希映射到访问对象元素
- ClojureScript哈希映射性能与Javascript对象
- 现实世界中的映射(哈希表)
- 在新创建的模型哈希中缺少烬数据映射
- 给定两个数组,它们都有相同数量的元素,构造所有的哈希映射并返回
- 通过ajax传输哈希映射并转换为php数组
- 如何获得合并集嵌套数组列表哈希映射在immutablejs
- 如何将哈希映射数组插入Redis?(Node.js)