在es6中引入了新的數據類型Map與Set結構 以下是Map與Set的一些簡單使用
官方解釋:它類似於對象,也是鍵值對的集合,但是“鍵”的范圍不限於字符串,各種類型的值(包括對象)都可以當作鍵。也就是說,Object結構提供了“字符串—值”的對應,Map結構提供了“值—值”的對應,是一種更完善的Hash結構實現。如果你需要“鍵值對”的數據結構,Map比Object更合適。
Map:
var a=new Map() //新建一個Map對象 console.log(a) //Map(0) {} a.set('name','xiaoming') // 添加值 變成了Map(1) {"name" => "xiaoming"} a.set('age',19) // 添加值 變成Map(2) {"name" => "xiaoming", "age" => 19}
a.get('name') //xiaoming 獲取值
總結:Map是以鍵值對的結構的對象,具有極快的查找速度(優點)。 一個Kay永遠只對應一個Value
Set:
Set也是一個構造函數,其數據結構類似於數組,但其不同之處在於永遠沒有重復的值 。
我們知道在js的這個===判斷之下 NaN是不等於NaN的 即
NaN==NaN false NaN===NaN false
那么在其Set結構中 其值是相等的。簡單的用法:
let a= new Set() //Set(0) {} a.add(1);//Set(1) {1}
a.add(1);//Set(1){1} 並沒有重復添加 a.delete(1) ; //返回true 說明刪除成功 console.log(a) //Set(0){}
這個Set對象用於一些去重是極為方便的比如一個簡單的數組去重:
var a=[1,2,3,4,5,5,4,3,2,1,NaN,null,undefined,null,NaN]; var b=new Set(a); console.log(b) //Set(8) {1, 2, 3, 4, 5,NaN,null,undefined} //將其轉換為數組即可 用es6的擴展運算符也可以的 var c=[...b] //(8) [1, 2, 3, 4, 5, NaN, null, undefined] //或者使用Array.form var f=Array.from(b) //(8) [1, 2, 3, 4, 5, NaN, null, undefined]
總結:
Set只有值而沒有鍵 可以用add添加數據進去,但是重復添加的數據不會出現 可以用delete來進行刪除數據 ;下面是詳細用法
add(value):添加某個值,返回Set結構本身。
delete(value):刪除某個值,返回一個布爾值,表示刪除是否成功。
has(value):返回一個布爾值,表示該值是否為Set的成員。
clear():清除所有成員,沒有返回值。