es6-set,map
阿新 • • 發佈:2018-11-17
//類似於陣列 成員的值是唯一的 add()新增 //建立方式一: const set = new Set(); set.add(2).add('2').add(4); console.log(set); //建立方式二: var arr = [1,2,3,4,2,4,5,2,1,4,5,5,7]; const set2 = new Set(arr); //建立方式三: const set3 = new Set(); [2,34,2,4,5,2,4].forEach(item => set3.add(item)); //size 長度 去重後的長度 set.size //delete() 刪除 set.delete(3); //clear() 清除所有 //has() 是否set成員 返回true false set.has(1) const set = new Set(); set.add(2).add('a').add(4); var a = 'a'; if(set.has(a)){ console.log('ok'); }; //陣列去重 轉為陣列 //一種寫法 var arr = [1,2,3,4,2,4,5,2,1,4,5,5,7]; console.log([...new Set(arr)]); //二種寫法 var arr2 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]); [...arr2]; //三種寫法 Array.from() var arr2 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]); var arr3 = Array.from(arr2); //迴圈 for of for in //for...of 擁有者 array strings set map (iterator方法) //for...in //物件中獲取的是key var obj = {name:1,age:20}; for(var v in obj){ console.log(v) //name age console.log(obj[v]) ====1 20 }; //陣列中獲取的是索引 var arr = [1,2,3,4,5]; for(var v in arr){ console.log(v) //01234索引 console.log(arr[v]) 1,2,3,4,5 }; // for ..of 獲取當前的值 var arr = [1,2,3,4,5]; for(var v of arr){ console.log(v); }; //字串 var str = 'hello'; for(var v of str){ console.log(v); }; //set var arr2 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]); for(let v of arr2){ console.log(v); }; //遍歷 方法 keys() value() entries() var arr2 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]); for(let v of arr2.entries()){ console.log(v); }; //filter() 過濾方法 var a = [1,2,3,4,2,4,5,2,1,4,5,5,7].filter(function(item,index){ return item >3 }); //獲取交集 var arr1 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]); var arr2 = new Set([9,5,2,4,8]); var arr3 = new Set([...arr1].filter(item => arr2.has(item))); // 2 4 5 //並集 var arr4 = new Set([...arr1,...arr2]); //差集 var arr1 = new Set([1,2,3,4,2,4,5,2,1,4,5,5,7]); var arr2 = new Set([9,5,2,4,8]); var arr3 = new Set([...arr1].filter(item => !arr2.has(item))); //1 3 7 var arr3 = new Set([...arr2].filter(item => !arr1.has(item))); //9 8 //map 類似於物件 map的鍵可以是其它的型別 鍵值對 var m = new Map() m.set('name','abc').set('age',20); var name = 'name'; m.get(name); //可以為其它型別 m.set(123,'123'); m.set(true,'124'); m.set(undefined,'124'); var a = {msg:'hello'}; m.set(a,'name'); m.get(a); //has() //delete() //clear() //size // Map 可以接受一個數組作為引數 var m = new Map([['name','a'],['age',10],['a',3]]); //keys() value() entries() for(let [k,v] of m){ console.log(v) }; for(let k of m.keys()){ console.log(k) }; for(let v of m.values()){ console.log(v) }; //擴充套件運算子 var m = new Map([['name','a'],['age',10],['a',3]]); var m2 = [...m.keys()]; //["name", "age", "a"] var m3 = [...m.value()]; //["a", 10, 3] //型別轉換 var m = new Map([['name','a'],['age',10],['a',3]]); //map轉為陣列 [...m]; [...m.keys()]; [...m.value()]; //陣列轉為map var m = new Map([['name','a'],['age',10],['a',3]]); var m2 = [...m]; var m3 = new Map(m2); //轉為物件 var m = new Map([['name','a'],['age',10],['a',3]]); var obj = {}; for(let [k,v] of m){ obj[k] = v; }; console.log(obj); //物件轉為map var obj2 = {msg:'hello',flag:true}; var m = new Map(); for(let k in obj2){ m.set(k,obj2[k]) }; //4、另一種方式 物件轉map function objToStrMap(obj) { let m = new Map(); for (let k of Object.keys(obj)) { //name value for...of 不能遍歷物件 m.set(k, obj[k]); } return m; }; objToStrMap({name:1, value:2}); //Object.keys() var obj2 = {msg:'hello',flag:true}; console.log(Object.keys(obj2)); //["msg", "flag"] console.log(Object.values(obj2)); //["hello", true] }