ES6 Map結(jié)構(gòu)的應(yīng)用實例分析
本文實例講述了ES6 Map結(jié)構(gòu)的應(yīng)用。分享給大家供大家參考,具體如下:
Map 數(shù)據(jù)結(jié)構(gòu)類似于對象,也是鍵值對的集合,但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當作鍵。也就是說,Object 結(jié)構(gòu)提供了“字符串—值”的對應(yīng),Map 結(jié)構(gòu)提供了“任何—值”的對應(yīng),是一種更完善的 Hash 結(jié)構(gòu)實現(xiàn)。如果你需要“鍵值對”的數(shù)據(jù)結(jié)構(gòu),Map 比 Object 更合適。
初識map
var obj = { 'name':'Joh', qq:'5222', 'full name':'Johnny' }; let map = new Map(); map .set(obj, 'Hello map') .set('haha', 12) .set(52, obj) .set(NaN, new Set([1,2,3])); console.log(map); console.log(map.size); // 4
Map可以連續(xù)set,就像Set可以連續(xù)add一樣,同樣有size的api
map 的delete, has方法
var obj = { 'name':'Joh', qq:'5222', 'full name':'Johnny' }; var arr = [1,2]; let map = new Map(); // map 可以連續(xù)set map .set(obj,'11') .set(11,3) .set(12,'H') .set(arr,'h'); var delRes = map.delete(obj); // map不可以連續(xù) delete console.log(delRes); // true var hasBool1 = map.has(11); console.log(hasBool1); // true var hasBool2 = map.has(arr); console.log(hasBool2); // true console.log(map.size); // 3
NaN在map上的特殊性與clear方法
let map = new Map(); // map 可以連續(xù)set map .set(11,3) .set(12,'H') .set(NaN,'h1') .set(NaN,'h2'); // 覆蓋前值 console.log(map.get(NaN)); // h2 map.clear(); console.log(map.size); // 0
和set相同,NaN在map上具有唯一性,clear方法會將集合清空
map 的構(gòu)造函數(shù)參數(shù)的傳遞,取值get方法,keys方法,values方法
let map = new Map([ ['name','Joh'], ['age',10] ]); let name = map.get('name'); let age = map.get('age'); console.log(name); // Joh console.log(age); // 10 let keys = map.keys(); for(let k of keys) { console.log(k); // 分別輸出 name 和 age } let values = map.values(); for(let v of values) { console.log(v); // 分別輸出 Joh 和 10 }
map與set的原型屬性比較和map使用entries方法獲得數(shù)據(jù)的實體
let map = new Map([ ['name','Joh'], ['age',10] ]); console.log(Set.prototype[Symbol.iterator] === Set.prototype.values); // true console.log(Map.prototype[Symbol.iterator] === Map.prototype.values); // false console.log(Map.prototype[Symbol.iterator] === Map.prototype.entries); // true let entries = map.entries(); for (let en of entries) { console.log(en); // 分別輸出 ['name','Joh'] 和 ['age',10] }
map內(nèi)forEach方法和對象傳遞,以及內(nèi)部this的使用
let map = new Map([ ['name','Joh'], ['age',10] ]); var me = { name:"Joh" }; map.forEach(function (val, key) { console.log(key, val); // 分別輸出 name Joh 和 "age" 10 }); console.log('>>>>>'); map.forEach(function (val, key) { // console.log(key, val); // 分別輸出 name Joh 和 "age" 10 console.log(this); // {name: "Joh"} 此處的this就是傳遞進來的對象 }, me);
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript數(shù)學運算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
JavaScript 模式之工廠模式(Factory)應(yīng)用介紹
工廠模式也是對象創(chuàng)建模式之一,它通常在類或類的靜態(tài)方法中去實現(xiàn),本文將詳細介紹JavaScript 工廠模式2012-11-11微信小程序與webview?H5交互的方法(內(nèi)嵌H5跳轉(zhuǎn)原生頁面)
小程序webView中嵌套H5頁面,難免會遇到小程序與h5頁面進行數(shù)據(jù)通信或交互的場景,下面這篇文章主要給大家介紹了關(guān)于微信小程序與webview?H5交互的相關(guān)資料,內(nèi)嵌H5跳轉(zhuǎn)原生頁面,需要的朋友可以參考下2022-11-11JavaScript 高仿真可控彈簧振子實現(xiàn)代碼
我剛學JavaScript ,看見一些牛人寫了許多特效,我也花了一天寫了一個彈簧振子,完全獨創(chuàng),沒有借鑒任何人的代碼.2009-10-10