zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    layui 表格分页
    MVC View 获取 控制器返回的ViewData和viewBag
    [转]C#编码规范
    [转]11-为什么局部变量是线程安全的?
    [转]C#进程间通讯--共享内存篇
    [转]C# DataGridView绑定数据源
    [转]PropertyGrid自定义控件
    [转]谁说.NET不适合搞大数据,机器学习、人工智能
    [转]Halcon的C#二次开发及经验分享
    [转]图像获取与采集及图像格式与Region介绍——第2讲
  • 原文地址:https://www.cnblogs.com/7qin/p/9631681.html
Copyright © 2011-2022 走看看