最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js中Map和Set的用法及區(qū)別實(shí)例詳解

 更新時(shí)間:2022年02月15日 16:22:07   作者:摸魚小公舉  
map和set一樣是關(guān)聯(lián)式容器,它們的底層容器都是紅黑樹,區(qū)別就在于map的值不作為鍵,鍵和值是分開的,下面這篇文章主要給大家介紹了關(guān)于js中Map和Set的用法及區(qū)別的相關(guān)資料,需要的朋友可以參考下

首先了解一下 Map

Map 是一組鍵值對(duì)的結(jié)構(gòu),和 JSON 對(duì)象類似。

(1) Map數(shù)據(jù)結(jié)構(gòu)如下

這里我們可以看到的是Map的數(shù)據(jù)結(jié)構(gòu)是一個(gè)鍵值對(duì)的結(jié)構(gòu)

(2) key 不僅可以是字符串還可以是對(duì)象

var obj ={name:"小如",age:9}
let map = new Map()
map.set(obj,"111")

打印結(jié)果如下

(3) Map常用語法如下

//初始化`Map`需要一個(gè)二維數(shù)組(請(qǐng)看 Map 數(shù)據(jù)結(jié)構(gòu)),或者直接初始化一個(gè)空`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) 一個(gè)key只能對(duì)應(yīng)一個(gè)value,多次對(duì)一個(gè)key放入value,后面的值會(huì)把前面的值覆蓋掉

var map =new Map
map.set('Amy',"女")
map.set('Amy',"男")
console.log(map) 

打印結(jié)果如下

再來了解一下 Set

Set 對(duì)象類似于數(shù)組,且成員的值都是唯一的

(1) 打印出的數(shù)據(jù)結(jié)構(gòu)如下

這里打印出來是一個(gè)對(duì)象

(2) 最常用來去重使用,去重方法有很多但是都沒有它運(yùn)行的快。

var arr=[1,3,4,2,5,1,4]
// 這里原本是一個(gè)對(duì)象用了es6的語法 轉(zhuǎn)化成了數(shù)組,就是轉(zhuǎn)化數(shù)組之前已經(jīng)過濾掉了重復(fù)的元素了
var arr2=[...new Set(arr)] //[1,3,4,2,5]

(3) Set常用語法如下

//初始化一個(gè)Set ,需要一個(gè)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}

//檢測(cè)是否含有此元素,有為true,沒有則為false
set.has(2) //true

總結(jié)Map和Set的區(qū)別

(1) 這兩種方法具有極快的查找速度;那么下面我們來對(duì)比一下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需要的是一個(gè)二維數(shù)組,而Set 需要的是一維 Array 數(shù)組

(3) Map 和 Set 都不允許鍵重復(fù)

(4) Map的鍵是不能修改,但是鍵對(duì)應(yīng)的值是可以修改的;Set不能通過迭代器來改變Set的值,因?yàn)镾et的值就是鍵。

(5) Map 是鍵值對(duì)的存在,值也不作為??;而 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Javascript----文件操作

    Javascript----文件操作

    Javascript----文件操作...
    2007-01-01
  • javascript中閉包(Closure)詳解

    javascript中閉包(Closure)詳解

    閉包(closure)是Javascript語言的一個(gè)難點(diǎn),也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。小編之前一直糊里糊涂的,沒有能夠弄明白JavaScript的閉包到底是什么,有什么用,本文把自己的理解些出來分享一下,希望不理解JavaScript閉包的朋友們看了之后能夠理解閉包!
    2016-01-01
  • Javascript表單驗(yàn)證要注意的事項(xiàng)

    Javascript表單驗(yàn)證要注意的事項(xiàng)

    JavaScript 可用來在數(shù)據(jù)被送往服務(wù)器前對(duì) HTML 表單中的這些輸入數(shù)據(jù)進(jìn)行驗(yàn)證。被 JavaScript 驗(yàn)證的這些典型的表單數(shù)據(jù)有:用戶是否已填寫表單中的必填項(xiàng)目?用戶輸入的郵件地址是否合法?用戶是否已輸入合法的日期?用戶是否在數(shù)據(jù)域 (numeric field) 中輸入了文本?
    2014-09-09
  • JS命名空間的另一種實(shí)現(xiàn)

    JS命名空間的另一種實(shí)現(xiàn)

    這篇文章介紹了js命名空間的另一種簡(jiǎn)單實(shí)現(xiàn)方法,有需要的朋友可以參考一下
    2013-08-08
  • js實(shí)現(xiàn)的xml對(duì)象轉(zhuǎn)json功能示例

    js實(shí)現(xiàn)的xml對(duì)象轉(zhuǎn)json功能示例

    這篇文章主要介紹了js實(shí)現(xiàn)的xml對(duì)象轉(zhuǎn)json功能,結(jié)合實(shí)例形式分析了javascript轉(zhuǎn)換成xml所涉及的字符串、對(duì)象、數(shù)組、遍歷等操作技巧與使用方法,需要的朋友可以參考下
    2016-12-12
  • 微信小程序?qū)崿F(xiàn)選項(xiàng)卡的簡(jiǎn)單實(shí)例

    微信小程序?qū)崿F(xiàn)選項(xiàng)卡的簡(jiǎn)單實(shí)例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)選項(xiàng)卡的簡(jiǎn)單實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JS中實(shí)現(xiàn)數(shù)組開頭添加元素

    JS中實(shí)現(xiàn)數(shù)組開頭添加元素

    這篇文章主要介紹了JS中實(shí)現(xiàn)數(shù)組開頭添加元素方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • JS簡(jiǎn)單實(shí)現(xiàn)數(shù)組去重的方法分析

    JS簡(jiǎn)單實(shí)現(xiàn)數(shù)組去重的方法分析

    這篇文章主要介紹了JS簡(jiǎn)單實(shí)現(xiàn)數(shù)組去重的方法,結(jié)合具體實(shí)例形式分析了javascript數(shù)組遍歷、判斷實(shí)現(xiàn)去重復(fù)的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-10-10
  • 動(dòng)態(tài)加載JavaScript文件的兩種方法

    動(dòng)態(tài)加載JavaScript文件的兩種方法

    第一種利用ajax方式,第二種是動(dòng)靜創(chuàng)建一個(gè)script標(biāo)簽,配置其src屬性,經(jīng)過把script標(biāo)簽拔出到頁面head來加載js,感樂趣的網(wǎng)友可以看下
    2016-04-04
  • js原生Ajax的封裝和原理詳解

    js原生Ajax的封裝和原理詳解

    這篇文章主要為大家詳細(xì)介紹了js原生Ajax的封裝和原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評(píng)論

巴南区| 额尔古纳市| 庄浪县| 东丰县| 璧山县| 灌南县| 视频| 河源市| 阿合奇县| 满城县| 忻城县| 沂水县| 武冈市| 枣强县| 长汀县| 临夏县| 大悟县| 普兰县| 铁岭市| 开阳县| 桦川县| 鄂托克前旗| 达州市| 枣强县| 龙陵县| 山阳县| 凭祥市| 和顺县| 淮南市| 黔江区| 铜陵市| 林州市| 五指山市| 平谷区| 方山县| 保亭| 景泰县| 青铜峡市| 垣曲县| 开平市| 绥中县|