天天看點

基于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();

    }

}

繼續閱讀