Is there hashmap in javascript?

藏色散人
Release: 2021-11-18 11:13:43
Original
3793 people have browsed it

There is hashmap in javascript, and the method to implement hashmap is "function HashMap(){this.map = {};}HashMap.prototype = {put : function...}".

Is there hashmap in javascript?

The operating environment of this article: windows7 system, javascript version 1.8.5, DELL G3 computer

Is there hashmap in javascript?

Implementation of HashMap in JavaScript

What is HashMap?

Implementation of Map interface based on hash table. This implementation provides all optional mapping operations and allows null values ​​and null keys. (The HashMap class is much the same as a Hashtable, except that it is not synchronized and allows null.) This class does not guarantee the order of the map, and in particular it does not guarantee that the order is immutable. This implementation provides stable performance for basic operations (get and put), assuming that the hash function distributes elements appropriately across buckets. The time required to iterate over a collection view is proportional to the "capacity" (number of buckets) of the HashMap instance and its size (number of key-value mappings).
So, if iteration performance is important, don't set the initial capacity too high (or the loading factor too low).

Implementation of HashMap in JavaScript
    var emojMap = ["[笑脸]", "[微笑]", "[喜欢]", "[飞吻]", "[尖叫]"
        , "[大哭]", "[哭笑不得]", "[墨镜]", "[饿了]", "[发呆]",
        "[沉思]", "[不屑]", "[鬼脸]", "[得意]", "[发怒]",
        "[眨眼]", "[汗]", "[舒服]", "[糟糕]", "[张嘴]",
        "[口罩]", "[没有嘴]", "[恶魔]", "[睡觉]", "[困乏]",
        "[难受]", "[调皮]", "[倔强]", "[困惑]", "[天使]",
        "[不看]", "[不听]", "[不说]", "[祈祷]", "[剪刀手]",
        "[拳头]", "[楼上]", "[好的]", "[赞]", "[鄙视]",
        "[鼓掌]", "[星星]", "[心]", "[心碎]", "[满分]",
        "[钱袋]", "[便便]", "[鬼魂]", "[眼睛]", "[鼻子]",
        "[耳朵]", "[嘴巴]", "[舌头]", "[猪]", "[狗]",
        "[猴子]", "[小马]", "[熊猫]", "[熊]", "[外星人]"
    ];
Copy after login

This number assembles the Emoji recognition data agreed during our development process and sends it to the server side

eg: I am HelloWord![Smile]Format

We need to parse data in the format of "[XX]" to match the corresponding image

Common methods of HashMap

In view of the operation of HashMap, we need to encapsulate the common operation methods

    function HashMap(){
        this.map = {};
    }
    HashMap.prototype = {
        put : function(key , value){// 向Map中增加元素(key, value) 
            this.map[key] = value;
        },
        get : function(key){ //获取指定Key的元素值Value,失败返回Null 
            if(this.map.hasOwnProperty(key)){
                return this.map[key];
            }
            return null;
        },
        remove : function(key){ // 删除指定Key的元素,成功返回True,失败返回False
            if(this.map.hasOwnProperty(key)){
                return delete this.map[key];
            }
            return false;
        },
        removeAll : function(){  //清空HashMap所有元素
            this.map = {};
        },
        keySet : function(){ //获取Map中所有KEY的数组(Array) 
            var _keys = [];
            for(var i in this.map){
                _keys.push(i);
            }
            return _keys;
        }
    };
    HashMap.prototype.constructor = HashMap;
Copy after login

The above is the HashMap operation method we encapsulate.

Using HashMap to develop an Emoji expression library

At first I thought of several solutions, just like the emojiMap array, if the other party sends a message

eg: I am HelloWord! [Smile] Format

    var r = /\[(.+?)\]/g;
    var str = "[笑脸][喜欢]emoji表情";
    var txt,url,tpl;
    for (var i in str.match(r)) {
        tpl = "<img src=&#39;" + i + ".png&#39; >";
        str = str.replace(str.match(r)[i],tpl);
    }
    console.log(str);
Copy after login

My initial idea was to use split to divide it into an array, and then use replace to replace the corresponding picture. Later I found this solution to emoticon Problems will occur if you send too many and cannot be replaced.
And you need to specify the index position of the array subscript
Later I changed it to the following method:

    var hashMap = new HashMap();
    //先向hashMap中存入元素
    for(var i in emojMap){
        hashMap.put(emojMap[i] ,(parseInt(i))+'.png');
    }
    var r = /([^\[\]]+)(?=\])/g;
    var str = "[笑脸][喜欢]emoji表情";
    var txt,url,tpl;
    for (var i in str.match(r)) {
        //获取hashMap中对应的Value
        txt = hashMap.get(str.match(r)[i])
        tpl = "<img src=&#39;" + i + ".png&#39; >";
        str = str.split(m[i]).join(tpl);
    }
    str=str.replace(/\[|]/g,'');
    console.log(str);
Copy after login

The advantage of using HasMap is that there is no need Worry about the location of the key, because each key corresponds to a val.

In this way, it can be perfectly replaced with Emoji pictures for display.

Recommended study: "javascript basic tutorial"

The above is the detailed content of Is there hashmap in javascript?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template