当前位置: 首页 > news >正文

js模拟hashtable

function Hashtable()//自定义hashtable
{
    this._hash = new Object();
    this.add = function(key, value) {
        if (typeof (key) != "undefined") {
            if (this.contains(key) == false) {
                this._hash[key] = typeof (value) == "undefined" ? null : value;
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    this.remove = function(key) { delete this._hash[key]; }
    this.count = function() { var i = 0; for (var k in this._hash) { i++; } return i; }
    this.items = function(key) { return this._hash[key]; }
    this.contains = function(key) { return typeof (this._hash[key]) != "undefined"; }
    this.clear = function() { for (var k in this._hash) { delete this._hash[k]; } }
}
//  js哈希表
function HashTable() {

    
this .ObjArr  =  {};

    
this .Count  =   0 ;

    
// 添加
     this .Add  =  function(key, value) {
        
if  ( this .ObjArr.hasOwnProperty(key)) {
            
return   false // 如果键已经存在,不添加
        }
        
else  {
            
this .ObjArr[key]  =  value;
            
this .Count ++ ;
            
return   true ;
        }
    }

    
// 是否包含某项
     this .Contains  =  function(key) {
        
return   this .ObjArr.hasOwnProperty(key);
    }

    
// 取某一项 其实等价于this.ObjArr[key]
     this .GetValue  =  function(key) {
        
if  ( this .Contains(key)) {
            
return   this .ObjArr[key];
        }
        
else  {
            
throw  Error( " Hashtable not cotains the key:  "   +  String(key));  // 脚本错误
            
// return;
        }
    }

    
// 移除
     this .Remove  =  function(key) {
        
if  ( this .Contains(key)) {
            delete 
this .ObjArr[key];
            
this .Count -- ;
        }
    }

    
// 清空
     this .Clear  =  function() {
        
this .ObjArr  =  {};  this .Count  =   0 ;
    }
}
 
测试代码:
// 员工
function  employee(id, userName) {
    
this .id  =  id;
    
this .userName  =  userName;
}

function  test() {

    
var  ht  =   new  HashTable();
    
var  tmpEmployee  =   null ;
    
for  ( var  i  =   1 ; i  <   6 ; i ++ ) {
        tmpEmployee 
=   new  employee(i,  " Employee_ "   +  i);
        ht.Add(i, tmpEmployee);
    }
    
for  ( var  i  =   1 ; i  <=  ht.Count; i ++ ) {
        alert(ht.GetValue(i).userName); 
// 其实等价于ht.ObjArr[i].userName
         // alert(ht.ObjArr[i].userName);
    }
    ht.Remove(
1 );
    alert(ht.Contains(
1 ));  // false
    alert(ht.Contains( 2 ));  // true
     // alert(ht.GetValue(1)); //异常
     var  result  =  ht.GetValue( 2 );
    
if  (result  !=   null ) {
        alert(
" Employee Id: "   +  result.id  +   " ;UserName: "   +  result.userName);
    }
    ht.Add(
2 " 这一个key已经存在! " );  // Add无效
     // ht.Clear(); //清空
    alert(ht.Count);

}

相关文章:

  • 取消锚(a/)点击后页面跳转的几种方法
  • 程序员面试题100题第26题——和为n连续正数序列
  • 软考 (一) 感触
  • 第二十三模板 15模板和友元
  • Android之loader
  • 第六天之还得接着采集
  • Emacs的haskell-mode的安装
  • 网络时间协议 --- 网络对时程序
  • Cocoa、Foundation、UIKit的概念
  • 想象你在镜子前,请问,为什么镜子中的影像可以颠倒左右,却不能颠倒上下?...
  • 浏览器是怎样工作的:渲染引擎,HTML解析(连载二)
  • NoSQL数据库大全收集整理
  • Android对象封装及按汉语拼音排序
  • 虚拟目录
  • Tomcat StringManager阅读学习 -我们到底能走多远系列(10)
  • 《剑指offer》分解让复杂问题更简单
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • android 一些 utils
  • Brief introduction of how to 'Call, Apply and Bind'
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Fundebug计费标准解释:事件数是如何定义的?
  • isset在php5.6-和php7.0+的一些差异
  • JavaScript DOM 10 - 滚动
  • JavaScript类型识别
  • Java多态
  • Meteor的表单提交:Form
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 利用DataURL技术在网页上显示图片
  • 如何使用 JavaScript 解析 URL
  • 使用SAX解析XML
  • 移动端唤起键盘时取消position:fixed定位
  • Prometheus VS InfluxDB
  • ​520就是要宠粉,你的心头书我买单
  • ​Spring Boot 分片上传文件
  • ###C语言程序设计-----C语言学习(6)#
  • #1014 : Trie树
  • (30)数组元素和与数字和的绝对差
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二)学习JVM —— 垃圾回收机制
  • (黑马C++)L06 重载与继承
  • (一)kafka实战——kafka源码编译启动
  • ***监测系统的构建(chkrootkit )
  • ..回顾17,展望18
  • ./configure、make、make install 命令
  • .bat文件调用java类的main方法
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET Core中的去虚
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET单元测试