天天看点

基于Array实现并扩展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.push = function (_key, _value) {

        //判断是否存在key

        if (this.containsKey(_key)) {

            return;

        }

        this.elements.push({

            key: _key,

            value: _value

        });

    }

    //向MAP中从右边删除元素

    this.pop = function () {

        return this.elements.pop();

    }

    //向MAP中从左边删除元素

    this.shift = function () {

        return this.elements.shift();

    }

    //删除指定KEY的元素,成功返回True,失败返回False

    this.remove = function (_key) {

        var bln = false;

        //判断是否存在key

        if (!this.containsKey(_key)) {

            return bln;

        }

        try {

            //遍历数组

            for (i = 0; i < this.elements.length; i++) {

                if (this.elements[i].key == _key) {

                    //从数组中移除

                    this.elements.splice(i, 1);

                    return true;

                }

            }

        } catch (e) {

            console.log(e);

        }

        return bln;

    }

    //获取指定KEY的元素值VALUE,失败返回NULL

    this.get = function (_key) {

        var result = null;

        try {

            for (var i = 0; i < this.elements.length; i++) {

                if (this.elements[i].key == _key) {

                    return this.elements[i].value;

                }

            }

        } catch (e) {

            console.log(e);

        }

        return result;

    }

    //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL

    this.element = function (_index) {

        //判断下标是否存在

        if (isNaN(_index) || _index < 0 || _index >= this.elements.length) {

            return null;

        }

        try {

            return this.elements[_index];

        } catch (e) {

            console.log(e);

        }

        return null;

    }

    //判断MAP中是否含有指定KEY的元素

    this.containsKey = function (_key) {

        var bln = false;

        try {

            for (var i = 0; i < this.elements.length; i++) {

                if (this.elements[i].key == _key) {

                    bln = true;

                }

            }

        } catch (e) {

            console.log(e);

        }

        return bln;

    }

    //判断MAP中是否含有指定KEY的元素(忽略大小写)

    this.containsKeyIgnoreCase = function (_key) {

        var bln = false;

        try {

            for (var i = 0; i < this.elements.length; i++) {

                if ((this.elements[i].key+"").toLowerCase() == (_key+"").toLowerCase()) {

                    bln = true;

                }

            }

        } catch (e) {

            console.log(e);

        }

        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) {

            console.log(e);

        }

        return bln;

    }

    //获取MAP中所有VALUE的数组(ARRAY)

    this.values = function () {

        var arr = new Array();

        for (var i = 0; i < this.elements.length; i++) {

            arr.push(this.elements[i].value);

        }

        return arr;

    }

    //获取MAP中所有VALUE的数组(唯一的 ARRAY)

    this.uniqueValues = function () {

        var arr = new Array();

        for (var i = 0; i < this.elements.length; i++) {

            var v = this.elements[i].value;

            //判断数组中是否存在

            if (arr.indexOf(v) < 0) {

                arr.push(v);

            }

        }

        return arr;

    }

    //获取MAP中所有KEY的数组(ARRAY)

    this.keys = function () {

        var arr = new Array();

        for (var i = 0; i < this.elements.length; i++) {

            arr.push(this.elements[i].key);

        }

        return arr;

    }

    //获取MAP中所有KEY-VALUE 的数组(ARRAY)

    this.toString = function () {

        var arr = new Array();

        for (var i = 0; i < this.elements.length; i++) {

            arr.push(this.elements[i].key+":"+this.elements[i].value);

        }

        return arr;

    }

    //生成随机数

    this.randomNum = function (size) {

        var size = this.elements.length;

        var num = parseInt(Math.random() * size);

        return num;

    }

    //随机一个key

    this.randomKey = function () {

        var randomNum = this.randomNum;

        return this.elements[randomNum].key;

    }

    //随机一个value

    this.randomValue = function () {

        var randomNum = this.randomNum;

        return this.elements[randomNum].value;

    }

    //随机一个元素(map)

    this.randomEntry = function () {

        var randomNum = this.randomNum;

        return this.elements[randomNum];

    }

    //map反转,按照push的顺序反转

    this.inverse = function(){

        this.elements.reverse();

    }

//map排序,按照push的顺序

    this.sort = function(){

        this.elements.sort();

    }

}

继续阅读