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

 

你可能感兴趣的:(map)