JS中MAP的用法示例,創建,賦值,清空,拷貝等,以及MAP工具類

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>JS中MAP的用法示例</title>
    <script>
        var myMap = new Map();
        myMap.set(0, "zero");
        myMap.set(1, "one");
        console.log('---------------------------------------------------')
        console.log(myMap.get(0)); //returns zero
        console.log(myMap.get("zero")); //returns undefined
        console.log(myMap.size);
        console.log(myMap.has(0));  // returns true
        console.log(myMap.has("zero"));  // returns false
        //console.log(myMap.delete(0));
        //myMap.clear();
        //console.log(myMap.size);

        for (var [key, value] of myMap) {
            console.log(key + " = " + value);
        }
        // 將會顯示兩個log。一個是"0 = zero"另一個是"1 = one"
        console.log('---------------------------------------------------')
        for (var key of myMap.keys()) {
            console.log(key);
        }
        // 將會顯示兩個log。 一個是 "0" 另一個是 "1"
        console.log('---------------------------------------------------')
        for (var value of myMap.values()) {
            console.log(value);
        }
        // 將會顯示兩個log。 一個是 "zero" 另一個是 "one"
        console.log('---------------------------------------------------')
        for (var [key, value] of myMap.entries()) {
            console.log(key + " = " + value);
        }
        // 將會顯示兩個log。 一個是 "0 = zero" 另一個是 "1 = one"

        console.log('---------------------------------------------------')
        var kvArray = [["key1", "value1"], ["key2", "value2"]];

        // 使用常規的Map構造函數可以將一個二維鍵值對數組轉換成一個Map對象
        var myMap = new Map(kvArray);

        myMap.get("key1"); // 返回值爲 "value1"

        // 使用Array.from函數可以將一個Map對象轉換成一個二維鍵值對數組
        console.log(Array.from(myMap)); // 輸出和kvArray相同的數組

        // 或者在鍵或者值的迭代器上使用Array.from,進而得到只含有鍵或者值的數組
        console.log(Array.from(myMap.keys())); // 輸出 ["key1", "key2"]

        console.log('---------------------------------------------------')
        var original = new Map([
            [0, "zero"],
            [1, 'one'],
            [2, 'two'],
        ]);

        var clone = new Map(original);

        console.log(clone.get(1)); // one
        console.log(clone.get(2)); // one
        console.log(original === clone); // false. Useful for shallow comparison


        var first = new Map([
            [1, 'one'],
            [2, 'two'],
            [3, 'three'],
        ]);

        var second = new Map([
            [1, 'uno'],
            [2, 'dos']
        ]);

        // 合併兩個Map對象時,如果有重複的鍵值,則後面的會覆蓋前面的。
        // 展開運算符本質上是將Map對象轉換成數組。
        var merged = new Map([...first, ...second]);
        for (var [key, value] of merged) {
            console.log(key + " = " + value);
        }
    </script>
</head>
<body>

</body>
</html>
/*
 * MAP對象,實現MAP功能
 *
 * 接口:
 * size()     獲取MAP元素個數
 * isEmpty()    判斷MAP是否爲空
 * clear()     刪除MAP所有元素
 * put(key, value)   向MAP中增加元素(key, value) 
 * remove(key)    刪除指定KEY的元素,成功返回True,失敗返回False
 * get(key)    獲取指定KEY的元素值VALUE,失敗返回NULL
 * element(index)   獲取指定索引的元素(使用element.key,element.value獲取KEY和VALUE),失敗返回NULL
 * containsKey(key)  判斷MAP中是否含有指定KEY的元素
 * containsValue(value) 判斷MAP中是否含有指定VALUE的元素
 * values()    獲取MAP中所有VALUE的數組(ARRAY)
 * keys()     獲取MAP中所有KEY的數組(ARRAY)
 *
 * 例子:
 * var map = new Map();
 *
 * map.put("key", "value");
 * var val = map.get("key")
 * ……
 *
 */
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<arr.length;j++){
                if(arr[j] == this.elements[i].key){
                    flag = false;
                    break;
                } 
            }
            if(flag){
                arr.push(this.elements[i].key);
            }
        }
        return arr;
    };
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章