zoukankan      html  css  js  c++  java
  • 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);

    }
  • 相关阅读:
    VB.NET导出excel并支持中文文件名 中文编码
    后台弹框。刷新不提示确认VB或.NET
    VB.NET读取保存项目中相对路径的XML
    禁止删除表里所有数据
    验证视图状态 MAC 失败的解决办法
    Flash OBJECT IIS7.0上传文件限制的解决方法
    jquery导航菜单上下都行,可以上弹也可以下拉,方便配置使用
    android开发环境之ADT安装,卸载,更新 ADT在线代理网址
    原创 C# 正则表达式 读写 Ini 文件
    原创C# 枚举 多状态 操作
  • 原文地址:https://www.cnblogs.com/fumj/p/2707237.html
Copyright © 2011-2022 走看看