ES6之前模拟Map数据结构的写法
Posted 7qin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6之前模拟Map数据结构的写法相关的知识,希望对你有一定的参考价值。
在ES6之前javascript 里面本身没有map对象,但是用JavaScript的Array、Object来模拟实现Map的数据结构。
现在已经有Map对象了,这里记录一下之前的写法
Array方法
1 /* 2 * MAP对象,实现MAP功能 3 * 4 * 接口: 5 * size() 获取MAP元素个数 6 * isEmpty() 判断MAP是否为空 7 * clear() 删除MAP所有元素 8 * put(key, value) 向MAP中增加元素(key, value) 9 * remove(key) 删除指定KEY的元素,成功返回True,失败返回False 10 * get(key) 获取指定KEY的元素值VALUE,失败返回NULL 11 * element(index) 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL 12 * containsKey(key) 判断MAP中是否含有指定KEY的元素 13 * containsValue(value) 判断MAP中是否含有指定VALUE的元素 14 * values() 获取MAP中所有VALUE的数组(ARRAY) 15 * keys() 获取MAP中所有KEY的数组(ARRAY) 16 * 17 * 例子: 18 * var map = new Map(); 19 * 20 * map.put("key", "value"); 21 * var val = map.get("key") 22 * …… 23 * 24 */ 25 function Map() { 26 this.elements = new Array(); 27 28 //获取MAP元素个数 29 this.size = function() { 30 return this.elements.length; 31 } 32 33 //判断MAP是否为空 34 this.isEmpty = function() { 35 return(this.elements.length < 1); 36 } 37 38 //删除MAP所有元素 39 this.clear = function() { 40 this.elements = new Array(); 41 } 42 43 //向MAP中增加元素(key, value) 44 this.put = function(_key, _value) { 45 this.elements.push( { 46 key : _key, 47 value : _value 48 }); 49 } 50 51 //删除指定KEY的元素,成功返回True,失败返回False 52 this.remove = function(_key) { 53 var bln = false; 54 try{ 55 for(i = 0; i < this.elements.length; i++) { 56 if(this.elements[i].key == _key) { 57 this.elements.splice(i, 1); 58 return true; 59 } 60 } 61 } catch(e) { 62 bln = false; 63 } 64 return bln; 65 } 66 67 //获取指定KEY的元素值VALUE,失败返回NULL 68 this.get = function(_key) { 69 try{ 70 for(i = 0; i < this.elements.length; i++) { 71 if(this.elements[i].key == _key) { 72 return this.elements[i].value; 73 } 74 } 75 } catch(e) { 76 return null; 77 } 78 } 79 80 //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL 81 this.element = function(_index) { 82 if(_index < 0 || _index >= this.elements.length) { 83 return null; 84 } 85 return this.elements[_index]; 86 } 87 88 //判断MAP中是否含有指定KEY的元素 89 this.containsKey = function(_key) { 90 varbln = false; 91 try{ 92 for(i = 0; i < this.elements.length; i++) { 93 if(this.elements[i].key == _key) { 94 bln = true; 95 } 96 } 97 } catch(e) { 98 bln = false; 99 } 100 return bln; 101 } 102 103 //判断MAP中是否含有指定VALUE的元素 104 this.containsValue = function(_value) { 105 var bln = false; 106 try{ 107 for(i = 0; i < this.elements.length; i++) { 108 if(this.elements[i].value == _value) { 109 bln = true; 110 } 111 } 112 } catch(e) { 113 bln = false; 114 } 115 return bln; 116 } 117 118 //获取MAP中所有VALUE的数组(ARRAY) 119 this.values = function() { 120 var arr = new Array(); 121 for(i = 0; i < this.elements.length; i++) { 122 arr.push(this.elements[i].value); 123 } 124 return arr; 125 } 126 127 //获取MAP中所有KEY的数组(ARRAY) 128 this.keys = function() { 129 var arr = new Array(); 130 for(i = 0; i < this.elements.length; i++) { 131 arr.push(this.elements[i].key); 132 } 133 return arr; 134 } 135 } 136 137 var map = new Map(); 138 139 map.put("key1", "value1"); 140 map.put("key2", "value2"); 141 map.put("key3", "value3"); 142 143 144 //var val = map.get("key1"); 145 // var val = map.containsKey("key1"); 146 // var val = map.element(2).value; 147 148 var arr=map.keys(); 149 for(var i=0;i<arr.length;i++){ 150 alert(map.get(arr[i])); 151 } 152 // alert(val);
Object方法
1 <script type=text/javascript charset=utf-8> 2 /***************模拟java里的map集合***************/ 3 function Map(){ 4 var obj = {};//空对象,存放键值对 5 6 //put方法,存值 7 this.put = function(key,value){ 8 obj[key] = value; 9 } 10 11 //size方法,返回大小 12 this.size = function(){ 13 var count = 0; 14 for(var att in obj){ 15 count++; 16 } 17 return count; 18 } 19 20 //get方法,根据key获得value 21 this.get = function(key){ 22 if(obj[key] || obj[key] === 0 || obj[key] === false){ 23 return obj[key]; 24 }else{ 25 return null; 26 } 27 } 28 29 //删除方法,根据key删除 30 this.remove = function(key){ 31 if (obj[key] || obj[key] === 0 || obj[key] === false) { 32 delete obj[key]; 33 } 34 } 35 36 //遍历map 37 this.each = function(fn){ 38 for(var att in obj){ 39 fn(att,obj[att]); 40 } 41 } 42 } 43 44 var m = new Map(); 45 m.put(‘001‘,‘BeiJing‘); 46 m.put(‘002‘,‘ShangHai‘); 47 //document.write(m.size()); 48 //m.remove(‘001‘); 49 //alert(m.get(‘001‘)); 50 m.each(function(key,value){ 51 alert(key + ‘:‘ + value); 52 }); 53 54 </script>
以上是关于ES6之前模拟Map数据结构的写法的主要内容,如果未能解决你的问题,请参考以下文章