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

相关推荐