Js simulates a simple instance of hashtable

  • 2020-03-30 02:15:09
  • OfStack


function Hashtable()//Custom 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 hash table
function HashTable() {
    this.ObjArr = {};
    this.Count = 0;
    // add 
    this.Add = function(key, value) {
        if (this.ObjArr.hasOwnProperty(key)) {
            return false; //If the key already exists, do not add it
        }
        else {
            this.ObjArr[key] = value;
            this.Count++;
            return true;
        }
    }
    //Whether or not it contains an item
    this.Contains = function(key) {
        return this.ObjArr.hasOwnProperty(key);
    }
    //So if I take a term that's the same thing as 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)); //Script errors
            //return;
        }
    }
    // remove 
    this.Remove = function(key) {
        if (this.Contains(key)) {
            delete this.ObjArr[key];
            this.Count--;
        }
    }
    // empty 
    this.Clear = function() {
        this.ObjArr = {}; this.Count = 0;
    }
}

 The test code :
// employees 
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); //This is equivalent to 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)); // abnormal 
    var result = ht.GetValue(2);
    if (result != null) {
        alert("Employee Id:" + result.id + ";UserName:" + result.userName);
    }
    ht.Add(2, " This one key existing !"); //The Add is invalid
    //ht.Clear(); // empty 
    alert(ht.Count);
}


Related articles: