1. 程式人生 > 實用技巧 >js中Set和Map

js中Set和Map

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]);  //獲取每個元素的鍵和鍵值
}