zoukankan      html  css  js  c++  java
  • js 中map的几种实现方式

    • 简单使用

      1, 通过对象方式:

            var myHash = {};        
            myHash["deviceID"] = "HY_000001";
            myHash["cameraID"] = "SX_000001";
            for(key in myHash){
                document.write( "key = " + key + "; value = " + myHash[key] + "<br />");    
            }

      2,通过数组方式:

            var myHash = [];        
            myHash.push("deviceID");
            myHash["deviceID"] = "HY_000001";
            myHash.push("cameraID");
            myHash["cameraID"] = "SX_000001";
            for(key in myHash){
                document.write( "key = " + key + "; value = " + myHash[key] + "<br />");    
            }
    • 通过对象方式定义map
    function getMap()
    {
        //初始化map_,给map_对象增加方法,使map_像Map
            var map_ = new Object();
            map_.put = function(key, value) {
            map_[key+'_'] = value;
        };
    
        map_.get = function(key) {
            return map_[key+'_'];
        };
    
        map_.remove = function(key) {
            delete map_[key+'_'];
        };
    
        map_.keyset = function() {
            var ret = "";
            for(var p in map_) {
                if(typeof p == 'string' && p.substring(p.length-1) == "_") {
                    ret += ",";
                    ret += p.substring(0,p.length-1);
                }
            }
    
            if(ret == "") {
                return ret.split(",");
            } else {
                return ret.substring(1).split(",");
            }
        };
    
        return map_;
    
    }
    
    var map = getMap();
    map.put("395","12,21,52,89,35");
    map.put("396","121111,2222221,5333332,8444449,3555555");
    alert(map.get("395"));//输出:12,21,52,89,35
    alert(map.keyset()); //输出:395,396
    View Code
    • 通过对象原型方式定义map
    function HashMap(){
        this.map = {};
    }
    
    HashMap.prototype = {
        put : function(key , value){
            this.map[key] = value;
        },
        get : function(key){
            if(this.map.hasOwnProperty(key)){
                return this.map[key];
            }
            return null;
        },
        remove : function(key){
            if(this.map.hasOwnProperty(key)){
                return delete this.map[key];
            }
            return false;
        },
        removeAll : function(){
            this.map = {};
        },
        keySet : function(){
            var _keys = [];
            for(var i in this.map){
                _keys.push(i);
            }
            return _keys;
        }
    };
    
    HashMap.prototype.constructor = HashMap;
    var hashMap = new HashMap();
    hashMap.put('key' ,'value');
    hashMap.put('key1' ,'value');
    console.log(hashMap.get('key'));
    console.log(hashMap.keySet());
    console.log(hashMap.remove('key'));
    console.log(hashMap.keySet());
    View Code
    • 通过数组方式定义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 = function(_value) {//removeByValueAndKey
            var bln = false;
            try {
                for (i = 0; i < this.elements.length; i++) {
                    if (this.elements[i].value == _value) {
                        this.elements.splice(i, 1);
                        return true;
                    }
                }
            } catch (e) {
                bln = false;
            }
            return bln;
        };
    
        //删除指定VALUE的元素,成功返回True,失败返回False
        this.removeByValueAndKey = function(_key,_value) {
            var bln = false;
            try {
                for (i = 0; i < this.elements.length; i++) {
                    if (this.elements[i].value == _value && this.elements[i].key == _key) {
                        this.elements.splice(i, 1);
                        return true;
                    }
                }
            } catch (e) {
                bln = false;
            }
            return bln;
        };
    
        //获取指定KEY的元素值VALUE,失败返回NULL
        this.get = function(_key) {
            try {
                for (i = 0; i < this.elements.length; i++) {
                    if (this.elements[i].key == _key) {
                        return this.elements[i].value;
                    }
                }
            } catch (e) {
                return false;
            }
            return false;
        };
    
        //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
        this.element = function(_index) {
            if (_index < 0 || _index >= this.elements.length) {
                return null;
            }
            return this.elements[_index];
        };
    
        //判断MAP中是否含有指定KEY的元素
        this.containsKey = function(_key) {
            var bln = false;
            try {
                for (i = 0; i < this.elements.length; i++) {
                    if (this.elements[i].key == _key) {
                        bln = true;
                    }
                }
            } catch (e) {
                bln = false;
            }
            return bln;
        };
    
        //判断MAP中是否含有指定VALUE的元素
        this.containsValue = function(_value) {
            var bln = false;
            try {
                for (i = 0; i < this.elements.length; i++) {
                    if (this.elements[i].value == _value) {
                        bln = true;
                    }
                }
            } catch (e) {
                bln = false;
            }
            return bln;
        };
    
        //判断MAP中是否含有指定VALUE的元素
        this.containsObj = function(_key,_value) {
            var bln = false;
            try {
                for (i = 0; i < this.elements.length; i++) {
                    if (this.elements[i].value == _value && this.elements[i].key == _key) {
                        bln = true;
                    }
                }
            } catch (e) {
                bln = false;
            }
            return bln;
        };
    
        //获取MAP中所有VALUE的数组(ARRAY)
        this.values = function() {
            var arr = new Array();
            for (i = 0; i < this.elements.length; i++) {
                arr.push(this.elements[i].value);
            }
            return arr;
        };
    
        //获取MAP中所有VALUE的数组(ARRAY)
        this.valuesByKey = function(_key) {
            var arr = new Array();
            for (i = 0; i < this.elements.length; i++) {
                if (this.elements[i].key == _key) {
                    arr.push(this.elements[i].value);
                }
            }
            return arr;
        };
    
        //获取MAP中所有KEY的数组(ARRAY)
        this.keys = function() {
            var arr = new Array();
            for (i = 0; i < this.elements.length; i++) {
                arr.push(this.elements[i].key);
            }
            return arr;
        };
    
        //获取key通过value
        this.keysByValue = function(_value) {
            var arr = new Array();
            for (i = 0; i < this.elements.length; i++) {
                if(_value == this.elements[i].value){
                    arr.push(this.elements[i].key);
                }
            }
            return arr;
        };
    
        //获取MAP中所有KEY的数组(ARRAY)
        this.keysRemoveDuplicate = function() {
            var arr = new Array();
            for (i = 0; i < this.elements.length; i++) {
                var flag = true;
                for(var j=0;j if(arr[j] == this.elements[i].key){
                    flag = false;
                    break;
                }
            }
            if(flag){
                arr.push(this.elements[i].key);
            }
        }
        return arr;
    };
    View Code
  • 相关阅读:
    用TortoiseSVN忽略文件或文件夹(ignore)(网络摘抄记录)
    GridView解决同一行item的高度不一样,如何同一行统一高度问题?
    解决android studio引用远程仓库下载慢(转)
    Databinding在自定义ViewGroup中如何绑定view
    (转 )【Android那些高逼格的写法】InvocationHandler与代理模式
    (转)秒懂,Java 注解 (Annotation)你可以这样学
    View拖拽 自定义绑定view拖拽的工具类
    bcrypt对密码加密的一些认识(学习笔记)
    Node.js+Koa开发微信公众号个人笔记(三)响应文本
    Node.js+Koa开发微信公众号个人笔记(二)响应事件
  • 原文地址:https://www.cnblogs.com/matthew-2013/p/3696221.html
Copyright © 2011-2022 走看看