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)); //false console.log(s.delete(2)); //true console.log(s); //{1,3} console.log(s.clear()); //清除集合内的所有内容
应用场景code
//数组去重 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);
相似于对象,本质上都是键值对集合对象
原始的对象key不管什么类型都会被转化成字符串接口
Map是严格意义上的键值对集合,能够使用任意类型的键ip
Map与对象的区别字符串
简单的说,Object类型就是添加计算属性,或者经过外部添加属性,他都会转化成string,且Object的key只容许string或symbol,而map很好解决了键的类型问题get
传统的添加键值对string
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 , value m.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 // 2 map.has('name') // true map.get('name') // "张三" map.has('title') // true map.get('title') // "Author"
上面实际执行的是
const items = [ ['name', '张三'], ['title', 'Author'] ]; const map = new Map(); items.forEach( ([key, value]) => map.set(key, value) );
支持 iterator接口可被for..of..