js中Set和Map
阿新 • • 發佈:2020-07-22
js中除了有我們常見的五種資料結構,還有Set和Map兩種資料型別。
一.Set 無重複列表型別
特點:
1.沒有下標,不是按照下標儲存,但是是有序的,因此不能使用下標迴圈遍歷
2.沒有重複元素,任何元素存在唯一性,因此可以用來作去重處理,儲存不重複的資料,
3.插入速度和刪除速度非常快,遍歷查詢速度也非常快,但是略低於鍵值對型別。
4.支援方法:add(新增) delete(刪除) has(查詢) forEach(遍歷)
屬性: size 長度,只讀的,沒有length,
2.使用方法:
1)陣列去重
var arr=[1,3,5,7,2,4,3,5,1,2,6,5,7,8,9,1,2,4,3,5,7,9]; arr=Array.from(new Set(arr)); console.log(arr);
2)儲存資料(不能重複) 和陣列對比
//陣列儲存 var manager={ list:[], add(elem){ if(this.list.indexOf(elem)>-1) return; //判斷重複 this.list.push(elem); }, remove(elem){ var index=this.list.indexOf(elem); if(index<0) return; this.list.splice(index,1); }, update(){ for(var i=0;i<this.list.length;i++){ this.list[i].update(); } } } //Set儲存 var manager={ list:new Set(), //不需要進行儲存 add(elem){ this.list.add(elem); }, remove(elem){ this.list.delete(elem); }, update(){ for(let value of this.list){ value.update(); } } } //很明顯在進行儲存時比陣列有優勢
3.遍歷
1)forEach
var a=new Set([1,2,3,4,5]);
a.forEach(function(value1,value2,a1){
console.log(value1,value2,a1); //相當於物件的key和value,只是set中的key和value相等
})
2)for of 按照元素遍歷
var a=new Set([1,2,3,4,5]);
for(let value of a){
console.log(value);
}
二.map 是一種有長度的鍵值對資料型別
特點 1.hashMap 鍵值對的資料型別 map物件是關聯型的物件,類似php中關聯型的陣列結構 2.具備陣列的長度緊密型,又具備物件的鍵值對方法 3.它的獲取,刪除,查詢,遍歷速度很快 4.任何資料型別都可以作為鍵進行儲存,物件儲存用的是引用地址進行儲存的
支援方法
var map=new Map();
map.set("name","morty"); //1.新增元素
map.set("age",27);
map.delete("name"); //2.刪除鍵名(刪除元素)
console.log(map)
//map.clear(); //3.清除掉所有資料
console.log(map.has("age")); //4.判斷某個鍵是否存在 返回布林值
console.log(map.get("age")) //5.獲取某個鍵的值 27
console.log(map.values());// 6.獲取所有值的列表 {"morty", 27}
console.log(map.keys()); // 7.獲取所有鍵的列表 {"name", "age"}
遍歷方法
1.forEach
map.forEach(function(value,key,map){ //鍵值 鍵 原物件
console.log(value,key);
})
2.for of
1)
for(let key of map.keys()){ //遍歷鍵
console.log(key);
}
2)
for(let value of map.values()){ //遍歷鍵值
console.log(value);
}
3)
for(let arr of map.entries()){ //遍歷每個元素 返回多個數組,每個元素一個數組
console.log(arr);
}
for(let arr of map.entries()){
console.log(arr[0],arr[1]); //獲取每個元素的鍵和鍵值
}