javascript中模拟hashtable对数组进行快速查找
2006-09-27 11:09 Anders Cui 阅读(3677) 评论(3) 编辑 收藏 举报
面对一个数组,有时候希望能够直接访问一个特定元素,而不是对整个数组循环来查找该元素。想想C#中的查询方便的Hashtable,javascript可以模拟该技术以实现对数组的快速查找。
在javascript中,array被视作一个对象,这样就可以为其定义属性(property)而且不会影响数组中的原有数据。属性可以通过其名称进行引用。
实现的关键:对一个已存在的数组,我们必须为其每个元素生成一个唯一标识值,这样才能有效得访问到所有元素。
作为示例,首先创建一个自定义对象employee, 有两个属性name和age。
模拟hashtable:
比如:var BillsAge = employees["Bill"].age;
注意:上面定义的数组中,很难避免会出现两个name重复的元素,那么这时就会出现问题,后加的对象会覆盖掉原来的对象。所以要尽量保证用作hashtable的key的变量值的唯一性,这样才能保证访问到每一个元素。如果对象的一个属性不能保证唯一性,可以考虑多个属性的合并值。
参考资料:
(Oreilly)Javascript And Dhtml Cookbook.chm
在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
作者:Anders Cui
出处:http://anderslly.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://anderslly.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端