js中Map和Set的用法及區(qū)別實例詳解
首先了解一下 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) 最常用來去重使用,去重方法有很多但是都沒有它運行的快。
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ù)據(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í)行時間最短,那么查找速度最快,當(dāng)然了Set 和 Map的查找速度都很快想差不大,所以說這兩種方法具有極快的查找速度。
(2) 初始化需要的值不一樣,Map需要的是一個二維數(shù)組,而Set 需要的是一維 Array 數(shù)組
(3) Map 和 Set 都不允許鍵重復(fù)
(4) Map的鍵是不能修改,但是鍵對應(yīng)的值是可以修改的;Set不能通過迭代器來改變Set的值,因為Set的值就是鍵。
(5) Map 是鍵值對的存在,值也不作為??;而 Set 沒有 value 只有 key,value 就是 key;
結(jié)語:
Map 和 Set 數(shù)據(jù)結(jié)構(gòu)是ES6語法,最大優(yōu)點就是運行時間少大大提高了性能。
到此這篇關(guān)于js中Map和Set用法及區(qū)別的文章就介紹到這了,更多相關(guān)js中Map和Set用法區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實現(xiàn)實時更新系統(tǒng)時間的實例代碼
本文給大家分享javascript實現(xiàn)實時更新系統(tǒng)時間的實例代碼,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-04-04
JavaScript報錯:Uncaught TypeError: XXX is
在 JavaScript 編程中,“Uncaught TypeError: XYZ is not iterable” 是一種常見的錯誤,這種錯誤通常發(fā)生在試圖對一個非可迭代對象進行迭代操作時,了解這種錯誤的成因和解決方法,對于編寫健壯的代碼至關(guān)重要,需要的朋友可以參考下2024-07-07
Javascript this 的一些學(xué)習(xí)總結(jié)
相信有C++、C#或Java等編程經(jīng)驗的各位,對于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

