js中Map和Set的用法及區(qū)別實(shí)例詳解
首先了解一下 Map
Map 是一組鍵值對的結(jié)構(gòu),和 JSON 對象類似。
(1) Map數(shù)據(jù)結(jié)構(gòu)如下
這里我們可以看到的是Map的數(shù)據(jù)結(jié)構(gòu)是一個鍵值對的結(jié)構(gòu)
(2) key 不僅可以是字符串還可以是對象
var obj ={name:"小如",age:9} let map = new Map() map.set(obj,"111")
打印結(jié)果如下
(3) Map常用語法如下
//初始化`Map`需要一個二維數(shù)組(請看 Map 數(shù)據(jù)結(jié)構(gòu)),或者直接初始化一個空`Map` let map = new Map(); //添加key和value值 map.set('Amy','女') map.set('liuQi','男') //是否存在key,存在返回true,反之為false map.has('Amy') //true map.has('amy') //false //根據(jù)key獲取value map.get('Amy') //女 //刪除 key為Amy的value map.delete('Amy') map.get('Amy') //undefined 刪除成功
(4) 一個key只能對應(yīng)一個value,多次對一個key放入value,后面的值會把前面的值覆蓋掉
var map =new Map map.set('Amy',"女") map.set('Amy',"男") console.log(map)
打印結(jié)果如下
再來了解一下 Set
Set 對象類似于數(shù)組,且成員的值都是唯一的
(1) 打印出的數(shù)據(jù)結(jié)構(gòu)如下
這里打印出來是一個對象
(2) 最常用來去重使用,去重方法有很多但是都沒有它運(yùn)行的快。
var arr=[1,3,4,2,5,1,4] // 這里原本是一個對象用了es6的語法 轉(zhuǎn)化成了數(shù)組,就是轉(zhuǎn)化數(shù)組之前已經(jīng)過濾掉了重復(fù)的元素了 var arr2=[...new Set(arr)] //[1,3,4,2,5]
(3) Set常用語法如下
//初始化一個Set ,需要一個Array數(shù)組,要么空Set var set = new Set([1,2,3,5,6]) console.log(set) // {1, 2, 3, 5, 6} //添加元素到Set中 set.add(7) //{1, 2, 3, 5, 6, 7} //刪除Set中的元素 set.delete(3) // {1, 2, 5, 6, 7} //檢測是否含有此元素,有為true,沒有則為false set.has(2) //true
總結(jié)Map和Set的區(qū)別
(1) 這兩種方法具有極快的查找速度;那么下面我們來對比一下Map,Set,Array 的執(zhí)行時(shí)間
//首先初始化數(shù)據(jù) var lng=100 var arr =new Array(lng).fill(2) var set =new Set(arr) let map =new Map() for(var i=0;i<lng;i++){ arr[i]=i map.set(i,arr[i]) } // Array console.time() for(var j=0;j<lng;j++){ arr.includes(j) } console.timeEnd() //default: 0.01220703125 ms // Set console.time() for(var j=0;j<lng;j++){ set.has(j) } console.timeEnd() // default: 0.005859375 ms // Map console.time() for(var j=0;j<lng;j++){ map.has(j) } console.timeEnd() // default: 0.007080078125 ms
通過以上幾種方法我們可以看到,Set執(zhí)行時(shí)間最短,那么查找速度最快,當(dāng)然了Set 和 Map的查找速度都很快想差不大,所以說這兩種方法具有極快的查找速度。
(2) 初始化需要的值不一樣,Map需要的是一個二維數(shù)組,而Set 需要的是一維 Array 數(shù)組
(3) Map 和 Set 都不允許鍵重復(fù)
(4) Map的鍵是不能修改,但是鍵對應(yīng)的值是可以修改的;Set不能通過迭代器來改變Set的值,因?yàn)镾et的值就是鍵。
(5) Map 是鍵值對的存在,值也不作為健;而 Set 沒有 value 只有 key,value 就是 key;
結(jié)語:
Map 和 Set 數(shù)據(jù)結(jié)構(gòu)是ES6語法,最大優(yōu)點(diǎn)就是運(yùn)行時(shí)間少大大提高了性能。
到此這篇關(guān)于js中Map和Set用法及區(qū)別的文章就介紹到這了,更多相關(guān)js中Map和Set用法區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)實(shí)時(shí)更新系統(tǒng)時(shí)間的實(shí)例代碼
本文給大家分享javascript實(shí)現(xiàn)實(shí)時(shí)更新系統(tǒng)時(shí)間的實(shí)例代碼,代碼簡單易懂,非常不錯,具有參考借鑒價(jià)值,需要的朋友參考下吧2017-04-04JavaScript報(bào)錯:Uncaught TypeError: XXX is
在 JavaScript 編程中,“Uncaught TypeError: XYZ is not iterable” 是一種常見的錯誤,這種錯誤通常發(fā)生在試圖對一個非可迭代對象進(jìn)行迭代操作時(shí),了解這種錯誤的成因和解決方法,對于編寫健壯的代碼至關(guān)重要,需要的朋友可以參考下2024-07-07javascript判斷并獲取注冊表中可信任站點(diǎn)的方法
這篇文章主要介紹了javascript判斷并獲取注冊表中可信任站點(diǎn)的方法,可實(shí)現(xiàn)針對域名和IP的可信任站點(diǎn)判斷功能,需要的朋友可以參考下2015-06-06Javascript this 的一些學(xué)習(xí)總結(jié)
相信有C++、C#或Java等編程經(jīng)驗(yàn)的各位,對于this關(guān)鍵字再熟悉不過了。由于Javascript是一種面向?qū)ο蟮木幊陶Z言,它和C++、C#或Java一樣都包含this關(guān)鍵字,接下來我們將向大家介紹Javascript中的this關(guān)鍵字2012-08-08微信小程序事件對象中e.target和e.currentTarget的區(qū)別詳解
這篇文章主要介紹了微信小程序事件對象中e.target和e.currentTarget的區(qū)別詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-05