java script 实现 Map 函数

98 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Map

function Map(){

// private 

var obj = {} ;// 空的对象容器,承装键值对

// put 方法

this.put = function(key , value){

obj[key] = value ; // 把键值对绑定到obj对象上

}

// size 方法 获得map容器的个数

this.size = function(){

var count = 0 

for(var attr in obj){

count++;

}

return count 

}

// get 方法 根据key 取得value

this.get = function(key){

if(obj[key] || obj[key] === 0 || obj[key] === false){

return obj[key];

} else {

return null;

}

}

//remove 删除方法

this.remove = function(key){

if(obj[key] || obj[key] === 0 || obj[key] === false){

delete obj[key];

}

}

// eachMap 变量map容器的方法

this.eachMap = function(fn){

for(var attr in obj){

fn(attr, obj[attr]);

}

}

}

//模拟java里的Map

var m = new  Map();

m.put('01' , 'abc');

m.put('02' , false) ;

m.put('03' , true);

m.put('04' , new Date());

//alert(m.size());

//alert(m.get('02'));

//m.remove('03');

//alert(m.get('03'));

m.eachMap(function(key , value){

 alert(key +" :"+ value);

});

=============================

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.remove = 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;

    };

    //获取指定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 null;

        }

    };

    //获取指定索引的元素(使用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的数组(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中所有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;

    };

}