面对一个数组,有时候希望能够直接访问一个特定元素,而不是对整个数组循环来查找该元素。想想C#中的查询方便的Hashtable,javascript可以模拟该技术以实现对数组的快速查找。
在 javascript 中, array 被视作一个对象,这样就可以为其定义属性( property )而且不会影响数组中的原有数据。属性可以通过其名称进行引用。
实现的关键:对一个已存在的数组,我们必须为其每个元素生成一个唯一标识值,这样才能有效得访问到所有元素。
作为示例,首先创建一个自定义对象 employee, 有两个属性 name 和 age。
模拟 hashtable :
比如:var BillsAge = employees["Bill"].age;
注意:上面定义的数组中,很难避免会出现两个 name 重复的元素,那么这时就会出现问题,后加的对象会覆盖掉原来的对象。所以要尽量保证用作 hashtable 的 key 的变量值的唯一性,这样才能保证访问到每一个元素。如果对象的一个属性不能保证唯一性,可以考虑多个属性的合并值 。
参考资料:
在 javascript 中, array 被视作一个对象,这样就可以为其定义属性( property )而且不会影响数组中的原有数据。属性可以通过其名称进行引用。
实现的关键:对一个已存在的数组,我们必须为其每个元素生成一个唯一标识值,这样才能有效得访问到所有元素。
作为示例,首先创建一个自定义对象 employee, 有两个属性 name 和 age。
function
employee(name, age)
{
this .name = name;
this .age = age;
}
创建数组:
{
this .name = name;
this .age = age;
}
var
employees
=
new
Array();
employees[employees.length] = new employee( " Anders " , 25 );
employees[employees.length] = new employee( " Andrew " , 27 );
employees[employees.length] = new employee( " Bill " , 45 );
employees[employees.length] = new employee( " Anders " , 25 );
employees[employees.length] = new employee( " Andrew " , 27 );
employees[employees.length] = new employee( " Bill " , 45 );
模拟 hashtable :
for
(
var
i
=
0
; i
<
employees.length; i
++
)
{
employees[employees[i].name] = employees[i];
}
这里用
employees[i]
的
name属性
作为
hashtable
的
key
,
employees[i]
作为value,这样就可以
通过name进行快速查找;
{
employees[employees[i].name] = employees[i];
}
比如:var BillsAge = employees["Bill"].age;
注意:上面定义的数组中,很难避免会出现两个 name 重复的元素,那么这时就会出现问题,后加的对象会覆盖掉原来的对象。所以要尽量保证用作 hashtable 的 key 的变量值的唯一性,这样才能保证访问到每一个元素。如果对象的一个属性不能保证唯一性,可以考虑多个属性的合并值 。
参考资料:
(Oreilly)Javascript And Dhtml Cookbook.chm
本文转自一个程序员的自省博客园博客,原文链接:http://www.cnblogs.com/anderslly/archive/2006/09/27/javascripthashtable.html,如需转载请自行联系原作者。