首页 > 代码库 > 使用JS模拟出Map对象
使用JS模拟出Map对象
最近要做的一个项目,支持方提供的一个Map方法,用着相当可以,功能稍有欠缺,因此我为之做了扩展,以下是代码:
function Map() { this.elements = new Array(); //获取MAP元素个数 this.size = function() { return this.elements.length; }; //判断MAP是否为空 this.isEmpty = function() { return (this.elements.length < 1); }; //删除MAP所有元素 this.clear = function() { this.elements = new Array(); }; //向MAP中增加元素(key, value) this.put = function(_key, _value) { this.elements.push( { key : _key, value : _value }); }; //删除指定KEY的元素,成功返回True,失败返回False this.removeByKey = function(_key) { var bln = false; try { for (i = 0; i < this.elements.length; i++) { if (this.elements[i].key == _key) { this.elements.splice(i, 1); return true; } } } catch (e) { bln = false; } return bln; }; //删除指定VALUE的元素,成功返回True,失败返回False this.removeByValue = http://www.mamicode.com/function(_value) {//removeByValueAndKey>
已经具备的功能:/* size() 获取MAP元素个数
* isEmpty() 判断MAP是否为空
* clear() 删除MAP所有元素
* put(key, value) 向MAP中增加元素(key, value)
* remove(key) 删除指定KEY的元素,成功返回True,失败返回False
* get(key) 获取指定KEY的元素值VALUE,失败返回NULL
* element(index) 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
* containsKey(key) 判断MAP中是否含有指定KEY的元素
* containsValue(value) 判断MAP中是否含有指定VALUE的元素
* values() 获取MAP中所有VALUE的数组(ARRAY)
* keys() 获取MAP中所有KEY的数组(ARRAY)*/
对于java的Map来说,功能或许尚有不足,尤其是put方法,居然不能够自动排重,也就是如果key存在重复,就一直存在着,也就说key有可能不唯一,不会进行value的覆盖,这显然与我们所认识的Map有所区别,为此,做一个扩展:
var myMap = { getMapInstance:function(){ var map = new Map(); /** * 如果key已存在,覆盖value */ map.putNoRepeat = function(_key,_value){ if(this.containsKey(_key)){ for (i = 0; i < this.elements.length; i++) { if (this.elements[i].key == _key) { this.elements[i].value = http://www.mamicode.com/_value;>这样的话,即继承了上面的Map,有了putNoRepeat这样的排重方法,使用的时候只需要:var map = myMap.getMapInstance();这样既能使用扩展的方法,又能节省不必要内存开销。使用JS模拟出Map对象
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。