Rumah  >  Artikel  >  hujung hadapan web  >  Adakah terdapat peta hash dalam javascript?

Adakah terdapat peta hash dalam javascript?

藏色散人
藏色散人asal
2021-11-18 11:13:433796semak imbas

Terdapat peta hash dalam JavaScript dan kaedah untuk melaksanakan peta hash ialah "function HashMap(){this.map = {};}HashMap.prototype = {put : function...}".

Adakah terdapat peta hash dalam javascript?

Persekitaran pengendalian artikel ini: sistem windows7, versi javascript 1.8.5, komputer DELL G3

Adakah terdapat peta cincang dalam javascript?

Pelaksanaan HashMap dalam JavaScript

Apakah HashMap?

Pelaksanaan antara muka Peta berdasarkan jadual cincang. Pelaksanaan ini menyediakan semua operasi pemetaan pilihan dan membenarkan nilai nol dan kekunci nol. (Kelas HashMap hampir sama dengan Hashtable, kecuali ia tidak disegerakkan dan membenarkan null.) Kelas ini tidak menjamin susunan peta, dan khususnya ia tidak menjamin bahawa susunan itu tidak berubah. Pelaksanaan ini menyediakan prestasi yang stabil untuk operasi asas (dapat dan letak), dengan mengandaikan bahawa fungsi cincang mengedarkan elemen dengan sewajarnya merentas baldi. Masa yang diperlukan untuk mengulangi paparan koleksi adalah berkadar dengan "kapasiti" (bilangan baldi) tika HashMap dan saiznya (bilangan pemetaan nilai kunci).
Jadi, jika prestasi lelaran adalah penting, jangan tetapkan kapasiti awal terlalu tinggi (atau faktor pemuatan terlalu rendah).

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

Nombor ini mengumpulkan data pengecaman Emoji yang dipersetujui semasa proses pembangunan kami dan menghantarnya ke bahagian pelayan

cth : Saya HelloWord! Format [Senyuman]

Kami perlu menghuraikan data dalam format "[XX]" untuk memadankan imej yang sepadan

Kaedah biasa HashMap

Memandangkan pengendalian HashMap, kami perlu merangkum kaedah operasi biasa

    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;

Di atas ialah kaedah pengendalian HashMap terkapsul kami.

Menggunakan HashMap untuk membangunkan pustaka ekspresi Emoji

Pada mulanya saya memikirkan beberapa penyelesaian, sama seperti susunan emojiMap, jika pihak lain menghantar mesej

cth: Saya HelloWord 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);

Idea awal saya ialah menggunakan split untuk membahagikannya kepada tatasusunan, dan kemudian gunakan replace untuk menggantikan yang sepadan Nanti saya dapati Masalah ini akan timbul jika terlalu banyak emotikon disiarkan dalam skema dan tidak boleh diganti.
Dan kedudukan indeks subskrip tatasusunan perlu ditentukan
Kemudian saya menukar ke kaedah berikut:

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

Gunakan HasMap Kelebihannya ialah anda tidak perlu risau tentang lokasi kunci, kerana setiap kekunci sepadan dengan val.

Dengan cara ini, ia boleh digantikan dengan sempurna dengan paparan gambar Emoji.

Kajian yang disyorkan: "Tutorial Asas JavaScript"

Atas ialah kandungan terperinci Adakah terdapat peta hash dalam javascript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn