结合prototype封装自定义的HashMap

引言:

结合前两天项目中有几个功能需求类似:需要根据网格的列的标题获取对应的数据,当然最简单的就是每循环一次就后台调数据库查询返回json处理,但是频繁的访问后台,成本未免太高而且性能也不高,结合业务的实际情况,于是乎采用这样的思路,在第一次调用的时候就把后台数据保存到一个数据结构(通过列标题名就能获取到对应的信息),以后调用时候就不需要调用后台访问数据库了,毕竟前台的效率往往高于后台,可是JavaScript并没有所谓类似C#中的HashMap或者字典这样的数据结构,只能自己定义一个数据结构,其实数据结构就是自己封装的一个对象,自己定义具有哪些属性,然后对应这些具有哪些操作,结合自己的项目实际多多运用数据结构思想会让你的代码更易维护更具效能。今天忙完任务就整理如下:

代码:

function fn_HashMap(length)
{
this.length=length;
this.obj=new Object();
}

fn_HashMap.prototype={ 

      isEmpty:function() { 
        return this.length == 0;
      },

      //判断对象中是否包含给定Key 
      containsKey:function(key) { 
        return (key in this.obj); 
      }, 

      //判断对象中是否包含给定的Value 
      containsValue:function(value) { 
        for (var key in this.obj) {
            if (this.obj[key] == value) {
                return true;
            }
        }
        return false;
      },

      //向HashMap中添加数据 
      putData:function(key, value) { 
         if (!this.containsKey(key)) {
                this.length++;
            }
         this.obj[key] = value;
      },

      //根据给定的Key获得Value 
      getValueByKey:function(key) { 
         return this.containsKey(key) ? this.obj[key] : null;
      },

      //根据给定的Key删除一个值 
      removeByKey:function(key, value) { 
         if (this.containsKey(key) && (delete this.obj[key])) {
                this.length--;
            }
      },

      //获取所有的value
      getAllValue :function () {
          var values = new Array();
          for (var key in this.obj) {
              values.push(this.obj[key]);
          }
          return values;
     },

      //获取所有的键值
      getAllKeySets : function () {
          var keys = new Array();
          for (var key in this.obj) {
              keys.push(key);
          }
          return keys;
    },

      //获取HasMap的长度
        getSize : function () {
            return this.length;
    },

        clear : function () {
        this.length = 0;
        this.obj = new Object();
    }

}

简单测试:

function testMap()
{
var length=0;
var p_atomHashMap=new fn_HashMap(length);
var name="Dota2";
var  computeMark="CHINA";
var   computeExp="TI5";
   p_atomHashMap.putData(name,{ComputeMark:computeMark,ComputeExp:computeExp}); 
   p_atomHashMap.putData("key1","Value1"); 
   p_atomHashMap.putData("key2","Value2"); 
   p_atomHashMap.putData("key3","Value3"); 
   p_atomHashMap.putData("key4","Value4"); 

//alert(p_atomHashMap.getValueByKey ("Dota2").ComputeMark);
//alert("size:"+p_atomHashMap.getSize()+" name:"+p_atomHashMap.getValueByKey("Dota2"));
//var keySet = p_atomHashMap.getAllValue(); 
var keySet = p_atomHashMap.getAllKeySets(); 

  for(var i=0;i<keySet.length;i++){ 
       alert(i+":"+keySet[i]+"  "); 
   } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CrazyMo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值