JavaScript中Map遍歷方法代碼示例
Map 結(jié)構(gòu)原生提供三個(gè)遍歷器生成函數(shù)和一個(gè)遍歷方法。
- Map.prototype.keys():返回鍵名的遍歷器。
- Map.prototype.values():返回鍵值的遍歷器。
- Map.prototype.entries():返回所有成員的遍歷器。
- Map.prototype.forEach():遍歷 Map 的所有成員。
需要特別注意的是,Map 的遍歷順序就是插入順序。
const map = new Map([ ['F', 'no'], ['T', 'yes'], ]); for (let key of map.keys()) { console.log(key); } // "F" // "T" for (let value of map.values()) { console.log(value); } // "no" // "yes" for (let item of map.entries()) { console.log(item[0], item[1]); } // "F" "no" // "T" "yes" // 或者 for (let [key, value] of map.entries()) { console.log(key, value); } // "F" "no" // "T" "yes" // 等同于使用map.entries() for (let [key, value] of map) { console.log(key, value); } // "F" "no" // "T" "yes"
上面代碼最后的那個(gè)例子,表示 Map 結(jié)構(gòu)的默認(rèn)遍歷器接口(Symbol.iterator屬性),就是entries方法。
map[Symbol.iterator] === map.entries // true
Map 結(jié)構(gòu)轉(zhuǎn)為數(shù)組結(jié)構(gòu),比較快速的方法是使用擴(kuò)展運(yùn)算符(…)。
const map = new Map([ [1, 'one'], [2, 'two'], [3, 'three'], ]); [...map.keys()] // [1, 2, 3] [...map.values()] // ['one', 'two', 'three'] [...map.entries()] // [[1,'one'], [2, 'two'], [3, 'three']] [...map] // [[1,'one'], [2, 'two'], [3, 'three']]
結(jié)合數(shù)組的map方法、filter方法,可以實(shí)現(xiàn) Map 的遍歷和過濾(Map 本身沒有map和filter方法)。
const map0 = new Map() .set(1, 'a') .set(2, 'b') .set(3, 'c'); const map1 = new Map( [...map0].filter(([k, v]) => k < 3) ); // 產(chǎn)生 Map 結(jié)構(gòu) {1 => 'a', 2 => 'b'} const map2 = new Map( [...map0].map(([k, v]) => [k * 2, '_' + v]) ); // 產(chǎn)生 Map 結(jié)構(gòu) {2 => '_a', 4 => '_b', 6 => '_c'}
此外,Map 還有一個(gè)forEach方法,與數(shù)組的forEach方法類似,也可以實(shí)現(xiàn)遍歷。
map.forEach(function(value, key, map) { console.log("Key: %s, Value: %s", key, value); });
forEach方法還可以接受第二個(gè)參數(shù),用來綁定this。
const reporter = { report: function(key, value) { console.log("Key: %s, Value: %s", key, value); } }; map.forEach(function(value, key, map) { this.report(key, value); }, reporter);
上面代碼中,forEach方法的回調(diào)函數(shù)的this,就指向reporter。
附:Map的使用和entry相關(guān)類型查看
map = new Map(); // 構(gòu)造Map對(duì)象。 Map(0) {} map.size // 大小為0 0 map.set(1, "one").set(2, "two").set(3, "three"); // 增加鍵值對(duì) Map(3) {1 => "one", 2 => "two", 3 => "three"} map.size // 大小為3 3 entries = map.entries(); // 獲取鍵值對(duì)的`Map Iterator`對(duì)象 MapIterator {1 => "one", 2 => "two", 3 => "three"} Object.prototype.toString.call(entries) // 類型為`MapIterator`。 "[object Map Iterator]" entryObj = entries.next(); // 調(diào)用next(),返回一個(gè)entryObj,是個(gè)對(duì)象{value:數(shù)組, done:false}。 {value: Array(2), done: false} Object.prototype.toString.call(entryObj) "[object Object]" entry = entryObj.value // 對(duì)象的value屬性是一個(gè)數(shù)組,長度為2。 (2) [1, "one"] Object.prototype.toString.call(entry) "[object Array]" entry (2) [1, "one"] console.log(entry[0], entry[1]) VM7998:1 1 "one"
總結(jié)
到此這篇關(guān)于JavaScript中Map遍歷方法的文章就介紹到這了,更多相關(guān)js Map遍歷方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
layui 實(shí)現(xiàn)table翻頁滾動(dòng)條位置保持不變的例子
今天小編就為大家分享一篇layui 實(shí)現(xiàn)table翻頁滾動(dòng)條位置保持不變的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09javascript如何讀寫本地sqlite數(shù)據(jù)庫
這篇文章主要介紹了javascript如何讀寫本地sqlite數(shù)據(jù)庫問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Vue之vue-tree-color組件實(shí)現(xiàn)組織架構(gòu)圖案例詳解
這篇文章主要介紹了Vue之vue-tree-color組件實(shí)現(xiàn)組織架構(gòu)圖案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09如何使用不同的方法在 JavaScript 中添加兩個(gè)向量
這篇文章主要介紹了如何在 JavaScript 中添加向量(Vector)類,使用不同的方法在 JavaScript 中添加兩個(gè)向量,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06Bootstrap彈出框(Popover)被擠壓的問題小結(jié)
比較了下Bootstrap的popover和一些其它的開源項(xiàng)目,覺得Bootstrap的還算不錯(cuò)。在使用過程中遇到了一系列問題,下面小編給大家分享Bootstrap彈出框(Popover)被擠壓的問題小結(jié),需要的朋友參考下吧2017-07-07使用JavaScript實(shí)現(xiàn)一個(gè)簡單的待辦事項(xiàng)列表todo-list
這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實(shí)現(xiàn)一個(gè)簡單的待辦事項(xiàng)列表todo-list,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-04-04詳解webpack之圖片引入-增強(qiáng)的file-loader:url-loader
這篇文章主要介紹了詳解webpack之圖片引入-增強(qiáng)的file-loader:url-loader,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10