ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptにハッシュマップはありますか?

JavaScriptにハッシュマップはありますか?

藏色散人
藏色散人オリジナル
2021-11-18 11:13:433785ブラウズ

JavaScriptにはハッシュマップがあり、ハッシュマップを実装するメソッドは「function HashMap(){this.map = {};}HashMap.prototype = {put : function...}」です。

JavaScriptにハッシュマップはありますか?

この記事の動作環境: Windows7 システム、JavaScript バージョン 1.8.5、DELL G3 コンピューター

ハッシュマップはありますかジャバスクリプト?

JavaScript での HashMap の実装

HashMap とは?

ハッシュ テーブルに基づいた Map インターフェイスの実装。この実装では、すべてのオプションのマッピング操作が提供され、null 値と null キーが許可されます。 (HashMap クラスは、同期されていないことと null を許可することを除いて、Hashtable とほぼ同じです。) このクラスはマップの順序を保証せず、特に順序が不変であることを保証しません。この実装では、ハッシュ関数がバケット間で要素を適切に分散すると仮定して、基本的な操作 (get と put) に対して安定したパフォーマンスを提供します。コレクション ビューの反復に必要な時間は、HashMap インスタンスの「容量」(バケットの数) とそのサイズ (キーと値のマッピングの数) に比例します。
したがって、反復パフォーマンスが重要な場合は、初期容量を高すぎないように (または負荷係数を低すぎずに) 設定しないでください。

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

この数値は、開発プロセス中に合意された絵文字認識データを組み立て、サーバー側に送信します

例: 私はですHelloWord![Smile]形式

対応する画像と一致するように「[XX]」形式のデータを解析する必要があります

HashMapの一般的なメソッド

HashMap の操作を考慮すると、共通の操作メソッドをカプセル化する必要があります。

    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;

上記は、カプセル化する HashMap の操作メソッドです。

HashMap を使用した絵文字表現ライブラリの開発

最初は、emojiMap 配列のように、相手がメッセージを送信した場合の解決策をいくつか考えました

例: 私は HelloWord! [笑顔] 形式

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

私の最初のアイデアは、split を使用して配列に分割し、replace を使用して対応する画像を置き換えることでした。後で、絵文字に対するこの解決策を見つけました。送信しすぎると置換できない場合に問題が発生します。
そして、配列添字のインデックス位置を指定する必要があります。
後で、これを次のように変更しました。次のメソッド:

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

HasMap を使用する利点は、各キーが val に対応するため、キーの場所について心配する必要がないことです。

このようにして、絵文字画像に完全に置き換えて表示することができます。

推奨学習: 「JavaScript 基本チュートリアル

以上がJavaScriptにハッシュマップはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。