javaScript如何实现hash

zxcullx 2013-06-13 09:28:35
javaScript没有哈希表让人很郁闷,我说的不是基于字符串,而是以对象为键值,象这样:

{ Object: value }

我尝试了一下,都是不成。有没有什么办法呢?
...全文
462 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
地狱羔羊 2013-06-13
  • 打赏
  • 举报
回复
或者你这写一个类例如HashObj, 你的所有object都是这个HashObj类的实例.然后你自己实现这个类的toString方法, 自己计算一个“unique adress”.那也可以哦
地狱羔羊 2013-06-13
  • 打赏
  • 举报
回复
你可以计算object的MD5值嘛..拿这个MD5值当key
引用 5 楼 zxcullx 的回复:
我是挖空心思想得到Object的那个“unique adress”,可怎么也不成。 toString()不行,结果都是一样"[object Object]"; parseInt()也不行,返回是“NaN”; 然后我想办法 Object |= interger,结果是0; ...... 哈希表是很有用的东西,javaScript不支持实在是太遗憾了。
zxcullx 2013-06-13
  • 打赏
  • 举报
回复
我是挖空心思想得到Object的那个“unique adress”,可怎么也不成。 toString()不行,结果都是一样"[object Object]"; parseInt()也不行,返回是“NaN”; 然后我想办法 Object |= interger,结果是0; ...... 哈希表是很有用的东西,javaScript不支持实在是太遗憾了。
地狱羔羊 2013-06-13
  • 打赏
  • 举报
回复
楼主意思是以对象为key还是value? value的话,没问题,key的话,是不行的. 对象的key只能是字符串或者数字.value可以是任意值. 另外, 1L这样也是有问题的哦.. 事实上,你这种最终的key是obj.toString(),也就是chrome下"[object Object]",并不是真的拿对象当key. 而且你在拿另外一个对象比如hash[obj2]="b". 只会修改上面的值,不会另外多一对键值.
引用 1 楼 wzs_xyz 的回复:
可以成功的 但要这样 var hash = {}; var obj = {}; hash[obj] = "a"; alert(hash[obj]);
未知数 2013-06-13
  • 打赏
  • 举报
回复
引用 1 楼 wzs_xyz 的回复:
可以成功的 但要这样 var hash = {}; var obj = {}; hash[obj] = "a"; alert(hash[obj]);
厄 有问题,虽然可以成功,但键值实际是把对象转化为了字符串,未达到效果。 看来js没有这种机制
地狱羔羊 2013-06-13
  • 打赏
  • 举报
回复
javaScript的普通对象本身就可以是哈希表
未知数 2013-06-13
  • 打赏
  • 举报
回复
可以成功的 但要这样 var hash = {}; var obj = {}; hash[obj] = "a"; alert(hash[obj]);
zxcullx 2013-06-13
  • 打赏
  • 举报
回复
document.getElementById('symbol')['customProperty '] = 'value'; 这个可行。结合7楼和12楼的方法,我这个问题算是解决了。
zxcullx 2013-06-13
  • 打赏
  • 举报
回复
我还试过setAttribute(),也是不行。
zxcullx 2013-06-13
  • 打赏
  • 举报
回复
引用 12 楼 shuixiya1999 的回复:
[quote=引用 11 楼 zxcullx 的回复:] 7楼的方法应该是可行的,但我说的对象是html element,不知道能不能附加属性,firefox据说可以,但不是所有的浏览器都支持。 对javaScript还不太熟悉,html element的属性好象和xml element不一样,不是想加就能加的。 而且,加上去的属性,估计都是字符串,要是能直接将对象的引用绑定上去就好了。
能不能, 行不行, 这些自己试过不就可以了, 尽是道听途说. 可以附加任何属性, 只是属性名(不是属性) 必须是字符串[/quote] 我试过呀,比如象这样: document.getElementById('symbol').customProperty = 'value'; 然后浏览器执行到那儿就挂了。 或者,要这样写:document.getElementById('symbol')['customProperty '] = 'value'; 这个倒没有试过。
汉尼拔 2013-06-13
  • 打赏
  • 举报
回复
引用 11 楼 zxcullx 的回复:
7楼的方法应该是可行的,但我说的对象是html element,不知道能不能附加属性,firefox据说可以,但不是所有的浏览器都支持。 对javaScript还不太熟悉,html element的属性好象和xml element不一样,不是想加就能加的。 而且,加上去的属性,估计都是字符串,要是能直接将对象的引用绑定上去就好了。
能不能, 行不行, 这些自己试过不就可以了, 尽是道听途说. 可以附加任何属性, 只是属性名(不是属性) 必须是字符串
zxcullx 2013-06-13
  • 打赏
  • 举报
回复
7楼的方法应该是可行的,但我说的对象是html element,不知道能不能附加属性,firefox据说可以,但不是所有的浏览器都支持。 对javaScript还不太熟悉,html element的属性好象和xml element不一样,不是想加就能加的。 而且,加上去的属性,估计都是字符串,要是能直接将对象的引用绑定上去就好了。
UEAnswer 2013-06-13
  • 打赏
  • 举报
回复
引用 楼主 zxcullx 的回复:
javaScript没有哈希表让人很郁闷,我说的不是基于字符串,而是以对象为键值,象这样: { Object: value } 我尝试了一下,都是不成。有没有什么办法呢?
javascript本身就是hash啊,你可以把对象序列化和反序列化使用,或者通过各种中间手段达到你的目的,比如数组或者json串。
  • 打赏
  • 举报
回复
为什么把时间浪费在一些不可能的事情上呢?
未知数 2013-06-13
  • 打赏
  • 举报
回复
楼上兄弟的方法很好,而且实现也很容易 你可以自己写一个类,构造时生成一个绝不重复的key值,然后重写toString方法,直接返回这个key就行了 js很灵活,同时意味着很多东西需要自己实现 就像js没有继承,我们可以自己实现,没有重载,我们也可以自己模拟

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧