JavaScript Set與Map數(shù)據(jù)結(jié)構(gòu)詳細(xì)分析
Set
ES6提供了新的數(shù)據(jù)結(jié)構(gòu) Set(集合)。它類似于數(shù)組,但成員的值都是唯一的,集合實現(xiàn)了iterator接口,所以可以使用 [擴展運算符] 和 [for...of] 進(jìn)行遍歷。
基本使用
添加新的元素
Set函數(shù)可以接受一個數(shù)組(或者具有iterable接口的其他數(shù)據(jù)結(jié)構(gòu))作為參數(shù),用來初始化。
<script> // 聲明一個 set let s = new Set([1,2,2,3,4,4,5]) //Set方法會自動去重 // 添加新的元素 console.log(s.add(6)); </script>
刪除元素
<script> // 聲明一個 set let s = new Set([1,2,2,3,4,4,5]) //Set方法會自動去重 // 刪除元素 s.delete(1) console.log(s); </script>
數(shù)組去重
<script> let arr = [1,2,2,3,4,4,5,6] let result = [...new Set(arr)] console.log(result);// [1, 2, 3, 4, 5, 6] </script>
檢測
<script> // 聲明一個 set let s = new Set([1,2,2,3,4,4,5]) //Set方法會自動去重 // 檢測 console.log(s.has(2));//true </script>
清空
<script> // 聲明一個 set let s = new Set([1,2,2,3,4,4,5]) //Set方法會自動去重 // 清空 console.log(s.clear());//undefined </script>
遍歷
<script> // 聲明一個 set let s = new Set([1,2,2,3,4,4,5]) //Set方法會自動去重 // 遍歷 for(let v of s){ console.log(v);//1,2,3,4,5 } </script>
交集
<script> let arr = [1,2,3,4,4,5,4,3,1,2,6] let arr2 = [3,4,5,1,4,7,8] // 先去重,避免重復(fù)數(shù)字比較降低效率 let result = [...new Set(arr)].filter(item=>{ // 對arr2進(jìn)行去重 let newarr2 = new Set(arr2) if(newarr2.has(item)){ return true }else{ return false } }) // 簡寫形式 // let result = [...new Set(arr)].filter(item=>new Set(arr2).has(item)) console.log(result);//[1, 3, 4, 5] </script>
并集
<script> let arr = [1,2,3,4,4,5,4,3,1,2,6] let arr2 = [3,4,5,1,4,7,8] let union = [...new Set([...arr,...arr2])] console.log(union); </script>
差集
<script> let arr = [1,2,3,4,4,5,4,3,1,2,6] let arr2 = [3,4,5,1,4,7,8] // 差集是交集的逆運算,主體的不同決定結(jié)果的不同 let diff = [...new Set(arr)].filter(item => !(new Set(arr2).has(item))) console.log(diff);//[2, 6] </script>
遍歷操作
Set數(shù)據(jù)結(jié)構(gòu)提供了四種遍歷方法,用于遍歷成員。
keys()、values()
由于 Set 結(jié)構(gòu)鍵名和鍵值是同一個值,所以 keys 方法和 values 方法的行為完全一致,都是返回鍵名/值 。
<script> let set = new Set(['red', 'green', 'blue',1]); for (var item of set.keys()) { console.log(item); } for (var item1 of set.values()) { console.log(item1); } console.log(item === item1);//true </script>
entries()
entries方法返回的結(jié)果包括鍵名和鍵值,所以輸出的數(shù)組,其鍵名和鍵值完全相等。
<script> let set = new Set(['red', 'green', 'blue',1]); for (var item of set.entries()) { console.log(item); } </script>
forEach()
forEach()方法用于對每個成員執(zhí)行某種操作,該方法參數(shù)就是一個處理函數(shù),該函數(shù)的參數(shù)與數(shù)組的forEach一致。
<script> let set = new Set(['red', 'green', 'blue',1]); set.forEach((value,key)=>console.log(key +':'+value)) </script>
Map
ES6提供了 Map 數(shù)據(jù)結(jié)構(gòu),它類似于對象,也是鍵值對的集合。但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當(dāng)作鍵。Map也實現(xiàn)了 iterator 接口,所以可以使用 [擴展運算符] 和 [for...of] 進(jìn)行遍歷。
基本使用
添加元素
<script> // 聲明 Map let m = new Map() // 添加元素 m.set('world',4) m.set('hello',function(){ console.log('abc'); }) let person = { name:'張三' } m.set(person,[5,6,7]) console.log(m); </script>
因為為Map添加了三次元素,所以Map的長度為3。
刪除元素
<script> // 聲明 Map let m = new Map() let person = function(){ console.log('hello world'); } m.set(person,'HELLO WPRLD') m.set('people',[1,2,3]) console.log(m);//Map(2) // 刪除元素 m.delete('people') console.log(m);//Map(1) </script>
獲取元素
get方法獲取key對應(yīng)的鍵值,如果找不到key,返回undefned。
<script> // 聲明 Map let m = new Map() // 獲取元素 let person = function(){ console.log('hello world'); } m.set(person,'HELLO WPRLD') console.log(m.get(person))//HELLO WPRLD </script>
檢測元素
has方法返回一個布爾值,用來檢測某個值是否在當(dāng)前 Map 對象中。
<script> // 聲明 Map let m = new Map() m.set('a',1) m.set(2,'b') m.set('c',3) // 檢測鍵名是否存在 console.log(m.has(1));//false console.log(m.has(2));//true </script>
清除元素
clear方法清除所有元素,沒有返回值。
<script> // 聲明 Map let m = new Map() m.set('a',1) m.set(2,'b') m.set('c',3) // 清除所有 m.clear() console.log(m);//Map(0) </script>
Map的遍歷操作和上文的Set方法一致,這里不再講解。
到此這篇關(guān)于JavaScript Set與Map數(shù)據(jù)結(jié)構(gòu)詳細(xì)分析的文章就介紹到這了,更多相關(guān)JS Set與Map內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript獲取select標(biāo)簽選中的值
這篇文章主要介紹javascript獲取select標(biāo)簽選中的值方法,比較實用,需要的朋友可以參考下。2016-06-06Uniapp微信小程序?qū)崿F(xiàn)全局事件監(jiān)聽并進(jìn)行數(shù)據(jù)埋點的方法
niapp起源?uni-app是一個使用Vue.js開發(fā)所有前端應(yīng)用的框架,下面這篇文章主要給大家介紹了關(guān)于Uniapp微信小程序?qū)崿F(xiàn)全局事件監(jiān)聽并進(jìn)行數(shù)據(jù)埋點的相關(guān)資料,需要的朋友可以參考下2022-11-11JS基于onclick事件實現(xiàn)單個按鈕的編輯與保存功能示例
這篇文章主要介紹了JS基于onclick事件實現(xiàn)單個按鈕的編輯與保存功能,結(jié)合實例形式分析了JS實現(xiàn)onclick響應(yīng)事件的轉(zhuǎn)換相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2017-02-02Javascript實現(xiàn)獲取及設(shè)置光標(biāo)位置的方法
這篇文章主要介紹了Javascript實現(xiàn)獲取及設(shè)置光標(biāo)位置的方法,涉及javascript針對頁面光標(biāo)位置的相關(guān)操作技巧,具有良好的兼容性,非常簡單實用,需要的朋友可以參考下2015-07-07