Set数据结构
ES6 提供了新的数据结构 Set。它相似于数组,然而成员的值都是惟一的,没有反复的值。
Set自身是一个构造函数,用来生成 Set 数据结构。
const s = new Set()s.add(1).add(2).add(1).add(3) //增加,可链式调用,不反复console.log(s); //Set {1,2,3}
Set遍历对象
//set对象遍历s.forEach(i=>console.log(i))for(let i of s){ console.log(i);}
console.log(s.size); //set对象长度console.log(s.has(100)); //falseconsole.log(s.delete(2)); //trueconsole.log(s); //{1,3}console.log(s.clear()); //革除汇合内的全部内容
利用场景
//数组去重const arr = [1,1,1,3,2,1,4,4]const ss = new Set(arr)const narr = Array.from(ss) //转化成实在数组console.log(ss,narr);const result = [...ss] //转化成实在数组console.log(result);
Map数据结构
相似于对象,实质上都是键值对汇合
原始的对象key无论什么类型都会被转化成字符串
Map是严格意义上的键值对汇合,能够应用任意类型的键
Map与对象的区别
简略的说,Object类型就是增加计算属性,或者通过内部增加属性,他都会转化成string,且Object的key只容许string或symbol,而map很好解决了键的类型问题
传统的增加键值对
const obj = { name:"mcgee"}obj[true] = "value"obj[11] = "value"obj[{a:1}] = "value"console.log(Object.keys(obj)) //[ '11', 'name', 'true', '[object Object]' ]
任意类型的Map键值对
const m = new Map()const str = {a:1};m.set(str,"value") //key , valuem.set(11,"asd")console.log(m);
操作方法
console.log(m.size)console.log(m.get(str))m.delete(11)console.log(m);m.clear()console.log(m);
Map 也能够承受一个数组作为参数。该数组的成员是一个个示意键值对的数组
const map = new Map([ ['name', '张三'], ['title', 'Author']]);map.size // 2map.has('name') // truemap.get('name') // "张三"map.has('title') // truemap.get('title') // "Author"
下面理论执行的是
const items = [ ['name', '张三'], ['title', 'Author']];const map = new Map();items.forEach( ([key, value]) => map.set(key, value));
反对 iterator接口可被for..of..