Set和Map數據
阿新 • • 發佈:2018-07-09
%s define value 聲明 map itl bject fine 字符
es6新的數據結構
1.Set:構造函數
const s = new Set ([1,2,3]); console.log(s)//Set(3){1,2,3};
[...s];//[1,2,3]
console.log(s);//Set(3){1,2,3};
s.add(4);//Set(4){1,2,3,4};
s.size;//4;
s.has(1);//true
s.delete(2);
s.clear();//Set(0){}
用於數組去重
let arr=[1,2,1]; arr = [...Set(arr)]//[1,2]
//Set裏NaN與NaN相等
let set = new Set();
set.add(NaN);
set.add(NaN);
set.size//1
Set遍歷操作
keys():返回鍵名的遍歷器
values():返回鍵值的遍歷器
entries():返回鍵值對的遍歷器
forEach():使用回調函數遍歷成員
//keys(): let set = new Set([11,2,3,4]); for(let item of set.keys()){ console.log(item) } //11,2,3,4 //values(): for (let val of set.values()){ console.log(val) } //11,2,3,4 //entries(): for (let item of set.entries()){ console.log(item) }//[11,11];[2,2];.... //forEach set.forEach((val)=>{console.log(val)})
還可以使用for... of
for (let val of set){ console.log(val) }
Map:可以使用非字符串作為鍵
//對象只允許使用字符串作為鍵;否則 var obj={a:1,b:2}; var ar={}; ar[obj]=2; console.log(ar);//{[object Object]: 2} //Map const map=new Map();
map.set(NaN,123);
map.get(NaN);//123
//undefined和null不相等 map.set(obj,2);//key:{name: "joe", say: ?};value:2 map.get(obj);//2 map.has(obj);/true map.delete(obj);//true map.delete(ofo);//報錯 map.delete(ar);//false
map.clear();
map.size//0
//數組生成新的map
const mvp = new Map([‘name‘,‘joe‘],[‘title‘,‘silence‘]);
mvp.size;//2
mvp.has(‘name‘)//true
mvp.get(‘name‘)//joe
//Set和Map生成新的Map
const set = new Set([[‘foo‘,1],[‘bar‘,2]]);
const m1 = new Map(set);
m1.get(‘foo‘)//1
遍歷方法
const map = new Map ([[‘name‘,‘joe‘],[‘say‘,‘hello‘]]); //keys() for (let key of map.keys()){ console.log(key)//name;say } //values() //entries() for (let item of map.entries()){ console.log(item)//會把鍵和值放在一個數組裏 } //forEach map.forEach()
Map轉為數組結構
const map=new Map([ [1,‘0ne‘], [2,‘two‘], [3,three] ]) [...map.keys] [...map.values] [...map.entries] [...map)
Map和數組方法
const map0 = new Map() .set(1,‘a‘) .set(2,‘b‘) .set(3,‘c‘); const map1=map0.filter(([key,value])=>{ return key>2 }) 類比使用數組map方法
const map=new Map([[‘e1‘,‘a‘],[‘e2‘,‘b‘]]) map.forEach(function(value, key, map) { console.log("Key: %s, Value: %s", key, value); });//Key: e1, Value: a;Key: e2, Value: b
forEach接收第二個參數用來綁定this
const reporter={ report:function(key,value){ console.log("Key:%s,Value:%s",key,value); } } const map=new Map([[‘e1‘,‘a‘],[‘e2‘,‘b‘]]); map.forEach(function(value,key,map){ this.report(key,value) },reporter) //聲明一個對象reporter裏面包含著對map遍歷的變量的處理,在對map進行forEach遍歷的時候,傳入第二個變量即reporter,可以在forEach函數中使用this.reporter對其中的變+量進行處理
Map轉換
//Map轉為數組 const map= new Map() .set(‘e1‘,2) .set({foo:3},[‘abc‘]); [...myMap]//[[‘e1‘,2],[{foo:3},[‘abc‘]]]
//數組轉Map const map=new Map([[1,2],[2,3]])
//Map轉為對象 function strMapToObj(strMap) { let obj = Object.create(null); for (let [k,v] of strMap) { obj[k] = v; } return obj; } const myMap = new Map() .set(‘yes‘, true) .set(‘no‘, false); strMapToObj(myMap) // { yes: true, no: false } //對象轉為Map function objToStrMap(obj) { let strMap = new Map(); for (let k of Object.keys(obj)) { strMap.set(k, obj[k]); } return strMap; } objToStrMap({yes: true, no: false})
Set和Map數據