JavaScript实现的简单Map

本文介绍了一个用JavaScript实现的简易HashMap(HashMapJS),该实现具备基本的增删查操作,并通过实例代码展示了其内部的工作原理。文章还探讨了如何为对象生成哈希码,以及如何在不支持原生哈希映射的环境中实现类似的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var HashMap = function(){
  this.initialize();
}

HashMap.prototype = {
  hashkey_prefix : "<#HashMapHashkeyPerfix>",
  hashcode_field : "<#HashMapHashcodeField>",
  hashmap_instance_id:0,
  
  initialize : function(){
    this.backing_hash = {};
    this.code = 0;
    this.hashmap_instance_id += 1;
    this.instance_id = this.hashmap_instance_id;
  },
  
  hashcodeField : function(){
    return this.hashcode_field + this.instance_id;
  },

  
  put : function(key,value){
    var prev;
    if(key && value){
      var hashCode;
      if( typeof(key) === 'number' || typeof(key) === 'string' ){
          hashCode = key;
      }else{
          hashCode = key[this.hashcodeField()];
      }
      
      if( hashCode ){
        prev = this.backing_hash[hashCode];
      }else{
        this.code += 1;
        hashCode = this.hashkey_prefix + this.code;
        key[this.hashcodeField()] = hashCode;
      }
      this.backing_hash[hashCode] = [key,value];
    }
    return prev === undefined ? undefined : prev[1];
  },

  get : function(key){
    var value;
    if(key){
      var hashCode;
      if( typeof(key) === 'number' || typeof(key) === 'string'  ){
        hashCode = key;
      }
      else{
        hashCode = key[this.hashcodeField()];
      }
      if(hashCode){
        value = this.backing_hash[hashCode];
      }
    }
    return value === undefined ? undefined : value[1];
  },

  del : function(key){
    var success = false;
    if(key){
      var hashCode;
      if( typeof(key) === 'number' || typeof(key) === 'string'  ){
        hashCode = key;
      }
      else{
        hashCode = key[this.hashcodeField()];
      }
      if(hashCode){
         var prev = this.backing_hash[hashCode];
         this.backing_hash[hashCode] = undefined;
         if(prev !== undefined){
           key[this.hashcodeField()] = undefined;
           success = true;
         }
      }
    }
    return success;
  },
  
   each : function(callback,args){
      var key;
      for( key in this.backing_hash){
         if(callback.call(this.backing_hash[key][1], this.backing_hash[key][0], this.backing_hash[key][1]) === false)
              break;
      }
      return this;
   },

   toString : function(){
       return "HashMapJS"    
   }

}

 

转载于:https://my.oschina.net/exit/blog/735460

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值