【发布时间】:2017-02-11 18:00:05
【问题描述】:
我需要一个 Javascript 中的 hash table,即实现一个关联数组,它将键(字符串)映射到值(在我的例子中,这些是几个整数数组)。我意识到这种方法并不常用,或者至少我还没有在网上找到它:
var hash = ['s0'];
for (var i = 5; i >= 1; i--) {
var r = Math.floor(Math.random() * 3);
hash['s'+i] = [r, r*2, r^2];
}
console.log(hash);
hash.forEach(function (v, i, a) {
document.getElementById('foreach').innerHTML += i + ' => ' + v + '<br>';
})
for (var i = 5; i >= 1; i--) {
var key = 's'+i;
document.getElementById('for').innerHTML += key + ' => [' + hash[key].toString() + ']<br>';
}
<p id="foreach">forEach (val,index):<br/></p>
<p id="for">for:<br/></p>
可能是因为在我添加新值后声明的数组似乎没有正确映射(打开控制台并单击+ 按钮,即使显示[s1],您也可以看到值在那里)。 forEach 一直假设数组只有一个值,但如果我直接访问这些键中的任何一个,例如hash['s3'],返回对应的数组。
因此,我做错了什么吗?我什至应该使用这种方法吗?
如果 JSON 中的对象更适合这种情况,那么实现与上面示例类似的简单方法的最佳方法是什么?
此外,如果key_string 是我想要作为键的字符串,hash.push(key_string: val_array) 会失败,因为它不是“形式参数”。但是,通过执行以下操作:
hash.push({'key':key_string,'value':val_array})
如何通过关联的键以最简单的方式访问其中一个数组?
【问题讨论】:
-
javascript 对象属性的作用与哈希表或关联数组大致相同,在 javascript 中实现哈希表要么是解决您要解决的任何问题的错误方法,要么是一个家庭作业问题。
-
将 var hash=['s0'] 更改为 var hash = {'s0':'first_element'};看看它做了什么
-
感谢@chiliNUT,但是如果对象属性“与哈希表的作用大致相同”并且如果通过“作业问题”您说这是一个“微不足道的问题”,您能否提供一个简单的哈希表问题的替代方案?我正在使用与上述类似的代码,它适用于我的目的,但不能使用
forEach... -
没有“JSON 对象”之类的东西,顺便说一下,只有 JSON(它是一个字符串)和一个 Object 对象......
-
感谢@VladimirM,我已经尝试过 Object 方法,如果您注意到问题末尾的小写字母,使用动态键 (
key_string) 对我不起作用。
标签: javascript arrays hashtable