结合prototype封装自定义的HashMap

来源:互联网 发布:mac系统被删除了 编辑:程序博客网 时间:2024/05/29 11:17

引言:

结合前两天项目中有几个功能需求类似:需要根据网格的列的标题获取对应的数据,当然最简单的就是每循环一次就后台调数据库查询返回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]+"  ");    } }
0 0
原创粉丝点击