更新時(shí)間:2022-07-27 來(lái)源:黑馬程序員 瀏覽量:
ES6提供了新的數(shù)據(jù)結(jié)構(gòu)Set。Set類(lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。它的實(shí)例的方法分為兩大類(lèi),即操作方法(用于操數(shù)據(jù))和遍歷方法(用于遍歷成員)。
Set數(shù)據(jù)結(jié)構(gòu)常用于電商網(wǎng)站的搜索功能中,用戶搜索完成后,網(wǎng)站要記錄用戶搜索的關(guān)鍵字,方便用戶下次直接單擊搜索歷史關(guān)鍵字來(lái)完成搜索。
Set本身是一個(gè)構(gòu)造函數(shù),創(chuàng)建此構(gòu)造函數(shù)的實(shí)例對(duì)象就是創(chuàng)建Set數(shù)據(jù)結(jié)構(gòu)。創(chuàng)建Set數(shù)據(jù)結(jié)構(gòu)示例代碼:
<script> const s1 = new Set0; //使用new關(guān)鍵字創(chuàng)建Set構(gòu)造函數(shù)的實(shí)例 console.log(s1.size); //輸出結(jié)果: 0 </script>
在創(chuàng)建Set數(shù)據(jù)結(jié)構(gòu)時(shí),也可以傳遞一個(gè)數(shù)組作為參數(shù),用來(lái)初始化。初始化Set數(shù)據(jù)結(jié)構(gòu)示例代碼如下:
<script> const s2 = new Set(['a', 'b']); console.log(s2.size);//輸出結(jié)果:2 </script>
在初始化Set構(gòu)造函數(shù)時(shí),可以傳遞一個(gè)數(shù)組作為參數(shù),如果數(shù)組中有重復(fù)的值,那么Set數(shù)據(jù)結(jié)構(gòu)會(huì)把重復(fù)的值過(guò)濾掉。
數(shù)組去重示例代碼
<script> const s3 = new Set(["a", "a", "b","b"]); console.log(s3.size);//輸出結(jié)果:2 const ary = [...s3]; //輸出結(jié)果:(2)["a","b"] donsole.log(ary); </script>
Set實(shí)例提供的add(0方法用于向Set數(shù)據(jù)結(jié)構(gòu)中添加某個(gè)值,它接收一個(gè)參數(shù)代表要添加的值,返回Set結(jié)構(gòu)本身。演示add0方法的使用
<script> const s4 = new Set(); s4.add('a').add('b'); console.log(s4.size);//輸出結(jié)果:2 </script>
Set實(shí)例提供的delete()方法用于刪除Set數(shù)據(jù)結(jié)構(gòu)中的某個(gè)值,它接收一個(gè)參數(shù)代表要?jiǎng)h除的值,返回一個(gè)布爾值,如果結(jié)果為true則表示刪除成功,為false則表示刪除失敗。演示delete()方法的使用
<script> const s4 = new Set(); s4.add('a').add('b'); const r1 = s4.delete('a'); console.log(s4.size);//輸出結(jié)果:1 console.log(r1); //輸出結(jié)果:true </script>
Set實(shí)例提供has()方法,該方法接收一個(gè)參數(shù)并判斷該參數(shù)是否為Set數(shù)據(jù)結(jié)構(gòu)中的成員,返回一個(gè)布爾值,如果結(jié)果為true則表示包含該成員,為false則表示不包含該成員。演示has()方法的使用:
<script> const s4 = new Set(); s4.add('a').add('b'); const r1 = s4.delete('a'); console.log(s4.size); //輸出結(jié)果:1 console.log(r1); //輸出結(jié)果:true const r2 = s4.has('a'); console.log(r2); //輸出結(jié)果:false </script>
Set實(shí)例提供的clear()方法用于清除Set數(shù)據(jù)結(jié)構(gòu)中的所有成員,該方法沒(méi)有返回值。演示clear0方法的使用:
<script> const s4 = new Set(); s4.add('a').add('b'); es4.clear(); console.log(s4.size);//輸出結(jié)果:0 </script>
Set數(shù)據(jù)結(jié)構(gòu)的實(shí)例與數(shù)組一樣,也擁有一個(gè)forEachO方法,用于遍歷Set數(shù)據(jù)結(jié)構(gòu)中的成員,該方法可以對(duì)每個(gè)成員執(zhí)行某種操作,沒(méi)有返回值。演示forEach(0方法的使用:
<script> const s5 = new Set(['a', 'b', 'c']); s5.forEach(value => { console.log(value);/∥/依次輸出a、b、c }); </script>