javascript 哈希表(hashtable)的简单实现


Posted in Javascript onJanuary 20, 2010

首先简单的介绍关于属性的一些方法:
属性的枚举:
for/in循环是遍历对象属性的方法。如

var obj = { 
name : 'obj1', 
age : 20, 
height : '176cm' 
} 
var str = ''; 
for(var name in obj) 
{ 
str += name + ':' + obj[name] + '\n'; 
} 
alert(str);

输出为:name:obj1

age:20

height:176cm
检查属性是否存在:
in运算符可以用来测试一个属性是否存在。

this.containsKey = function ( key ) 
{ 
return (key in entry); 
}

删除属性
使用delete运算符来删除一个对象的属性。使用delete删除的属性,for/in将不会枚举该属性,并且in运算符也不会检测到该属性。
delete entry[key];
delete obj.name;
下面是哈希表(hashtable)的js的实现方法:
function HashTable() 
{ 
var size = 0; 
var entry = new Object(); 
this.add = function (key , value) 
{ 
if(!this.containsKey(key)) 
{ 
size ++ ; 
} 
entry[key] = value; 
} 
this.getValue = function (key) 
{ 
return this.containsKey(key) ? entry[key] : null; 
} 
this.remove = function ( key ) 
{ 
if( this.containsKey(key) && ( delete entry[key] ) ) 
{ 
size --; 
} 
} 
this.containsKey = function ( key ) 
{ 
return (key in entry); 
} 
this.containsValue = function ( value ) 
{ 
for(var prop in entry) 
{ 
if(entry[prop] == value) 
{ 
return true; 
} 
} 
return false; 
} 
this.getValues = function () 
{ 
var values = new Array(); 
for(var prop in entry) 
{ 
values.push(entry[prop]); 
} 
return values; 
} 
this.getKeys = function () 
{ 
var keys = new Array(); 
for(var prop in entry) 
{ 
keys.push(prop); 
} 
return keys; 
} 
this.getSize = function () 
{ 
return size; 
} 
this.clear = function () 
{ 
size = 0; 
entry = new Object(); 
} 
}

测试:
代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>HashTable</title> 
<script type="text/javascript" src="/js/jquery.js"></script> 
<script type="text/javascript" src="/js/HashTable.js"></script> 
<script type="text/javascript"> 
function MyObject(name) 
{ 
this.name = name; 
this.toString = function(){ 
return this.name; 
} 
} 
$(function(){ 
var map = new HashTable(); 
map.add("A","1"); 
map.add("B","2"); 
map.add("A","5"); 
map.add("C","3"); 
map.add("A","4"); 
var arrayKey = new Array("1","2","3","4"); 
var arrayValue = new Array("A","B","C","D"); 
map.add(arrayKey,arrayValue); 
var value = map.getValue(arrayKey); 
var object1 = new MyObject("小4"); 
var object2 = new MyObject("小5"); 
map.add(object1,"小4"); 
map.add(object2,"小5"); 
$('#console').html(map.getKeys().join('|') + '<br>'); 
}) 
</script> 
</head> 
<body> 
<div id="console"></div> 
</body> 
</html>

javascript hashtable实现代码
https://3water.com/article/20372.htm
Javascript 相关文章推荐
JavaScript 函数式编程的原理
Oct 16 Javascript
JavaScript 拾碎[三] 使用className属性
Oct 16 Javascript
JS实现很酷的EMAIL地址添加功能实例
Feb 28 Javascript
JavaScript动态修改背景颜色的方法
Apr 16 Javascript
jQuery插件datalist实现很好看的input下拉列表
Jul 14 Javascript
BootStrap入门教程(二)之固定的内置样式
Sep 19 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
Dec 17 Javascript
jQuery实现Select下拉列表进行状态选择功能
Mar 30 jQuery
Vue项目引进ElementUI组件的方法
Nov 11 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
Mar 19 jQuery
基于Vue全局组件与局部组件的区别说明
Aug 11 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
Aug 15 Javascript
JS 对象介绍
Jan 20 #Javascript
JavaScript 学习笔记(十一)
Jan 19 #Javascript
9个JavaScript评级/投票插件
Jan 18 #Javascript
jQuery Flash/MP3/Video多媒体插件
Jan 18 #Javascript
使用IE6看老赵的博客 jQuery初探
Jan 17 #Javascript
jQuery+CSS 实现的超Sexy下拉菜单
Jan 17 #Javascript
JS与框架页的操作代码
Jan 17 #Javascript
You might like
我的论坛源代码(三)
2006/10/09 PHP
CI框架表单验证实例详解
2016/11/21 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
文本链接逐个出现的js脚本
2007/12/12 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
javascript 回调函数详解
2014/11/11 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
JavaScript文档加载模式以及元素获取
2020/07/28 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
Python内置模块turtle绘图详解
2017/12/09 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
Django实现基于类的分页功能
2019/10/31 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
J2EE中常用的名词进行解释
2015/11/09 面试题
班组长的岗位职责
2013/12/09 职场文书
企业法人授权委托书
2014/04/03 职场文书
大专护理专业自荐信
2015/03/25 职场文书
早上好问候语大全
2015/11/10 职场文书