91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ES6 Map原理是什么

發布時間:2021-12-31 16:08:09 來源:億速云 閱讀:180 作者:iii 欄目:開發技術

這篇文章主要介紹“ES6 Map原理是什么”,在日常操作中,相信很多人在ES6 Map原理是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ES6 Map原理是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Map利用鏈表,hash的思想來實現。

首先,Map可以實現刪除,而且刪除的數據可以是中間的值。而鏈表的優勢就是在中間的任意位置添加,刪除元素都非常快,不需要移動其他元素,直接改變指針的指向就可以。

而在存儲數據很多的情況下,會導致鏈條過長,導致查找效率慢,所以我們可以創建一個桶(存儲對象的容器),根據hash(把散列的值通過算法變成固定的某值)來平局分配數據,防止鏈條過長。

如下圖:桶里面有3個位置,每一個位置都是一個對象,通過next屬性指向下一個對象來把沒有關聯的對象聯到一起。

把Map屬性值和屬性名都存到對象的值里。

簡單模擬Map,代碼如下:

function Mymap() {  //構造函數    this.init();}//初始化函數,創建桶(數組),每個位置都是一個對象,每個對象的屬性上設置next屬性,并且初始化為null。Mymap.prototype.init = function () {      this.tong = new Array(8);    for (var i = 0; i < 8; i++) {        this.tong[i] = new Object();        this.tong[i].next = null;    }};//添加數據。Mymap.prototype.set = function (key, value) {    var index = this.hash(key);        //獲取到當前設置的key設置到那個位置上    var TempBucket = this.tong[index]; //獲取當前位置的對象    while (TempBucket.next) {          //遍歷如果當前對象鏈接的下一個不為空        if (TempBucket.next.key == key) {  //如果要設置的屬性已經存在,覆蓋其值。            TempBucket.next.value = value;            return;                          //return ,不在繼續遍歷        } else {            TempBucket = TempBucket.next;  //把指針指向下一個對象。        }    }    TempBucket.next = {  //對象的next是null ,添加對象。        key: key,        value: value,        next: null    }};//查詢數據Mymap.prototype.get = function (key) {    var index = this.hash(key);    var TempBucket = this.tong[index];    while(TempBucket){        if(TempBucket.key == key){            return TempBucket.value;        }else{            TempBucket = TempBucket.next;        }    }    return undefined;}//刪除數據Mymap.prototype.delete = function(key){    var index = this.hash(key);    var TempBucket = this.tong[index];    while(TempBucket){        if(TempBucket.next.key == key){            TempBucket.next = TempBucket.next.next;            return true;        }else{            TempBucket = TempBucket.next;        }    }}//看當前屬性是否存在Mymap.prototype.has = function(key){    var index = this.hash(key);    var TempBucket = this.tong[index];    while(TempBucket){        if(TempBucket.key == key){            return true;        }else{            TempBucket = TempBucket.next;        }    }    return false;}//清空這個mapMymap.prototype.clear = function(){    this.init();}//使設置的屬性平均分配到每個位置上,使得不會某個鏈條過長。Mymap.prototype.hash = function (key) {    var index = 0;    if (typeof key == "string") {        for (var i = 0; i < 3; i++) {            index = index + isNaN(key.charCodeAt(i)) ? 0 : key.charCodeAt(i);        }    }    else if (typeof key == 'object') {        index = 0;    }    else if (typeof key == 'number') {        index = isNaN(key) ? 7 : key;    } else {        index = 1;    }    return index % 8;}var map = new Mymap();    //使用構造函數的方式實例化mapmap.set('name','zwq');map.get('name');map.has('name);

到此,關于“ES6 Map原理是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤山市| 宜州市| 宿迁市| 汉中市| 河曲县| 云梦县| 庆阳市| 神农架林区| 天长市| 陇南市| 基隆市| 上栗县| 东安县| 永顺县| 西充县| 青川县| 太康县| 新宁县| 宣城市| 安图县| 保定市| 丰台区| 南华县| 罗田县| 石景山区| 彰化县| 兴安县| 顺昌县| 宜兰市| 茂名市| 西盟| 林口县| 威远县| 潞城市| 柘城县| 阜城县| 商丘市| 潞西市| 古交市| 江都市| 濉溪县|