Set集合
Set 原本就是一个构造函数,Set 集合主要用于存储不重复的数据,简单来说就是数据的去重 Set 函数可接受一个数组(或具有 iterable 接口的其他数据结构)作为参数,用来初始化
//类数组对象作为参数 const s = new Set(document.getElementsByTagName('div')); s.size;Set与扩展运算符(…)实现数组去重
//Set实现简单的数组去重 const s = new Set([2, 4, 5, 2, 5, 3, 1]); //数组作为参数 console.log(s);// {2, 4, 5, 3, 1} //返回的是一个对象形式,可通过...运算符转为数组形式 const s = [...new Set([2, 4, 5, 2, 5, 3, 1])]; console.log(s); //[2, 4, 5 ,3, 1]Set属性: size : 返回集合所包含元素的数量,只能读取,不能修改
const s = new Set([1, 3, 6, 5, 2, 1, 3, 1, 4]); s.size; //6Set实例对象方法:
add():添加值,返回Set结构本身has() :判断值是否存在集合当中,返回值为Boolean类型,若存在,返回true,否则falsedelete():删除集合中某个值,返回值为Boolean类型,表示删除成功与否clear():清除所有数据 const s = new Set([1, 2, 3, 5]); s.add(4) s.add(4)//无效添加 //has() s.has(3);//true s.has(6);//false //clear() s.clear(); //delete() s.delete();Set特殊点: Set 用于存放不重复的数据,若存放的值为一个原始值,会装换为字符串对象之后,再进行存储
NaN 与 NaN 为不恒等的,但在 Set 中的 NaN 与 NaN 相等,所以只能存在一个,不存在重复+0 与 -0 在存储判断用 Objec.is() 判断是相等的,因此不重复undefined 与 undefined 是恒等的,因此不重复Set遍历的方法 keys()、values()、entries()
//keys()、values()一样,返回形式一样 const s = new Set(['a', 'b', 'c']); for(let item of s.keys()){ console.log(item) } // a // b // c //以键值对的形式返回 for(let item of s.entries()){ console.log(item) } ["a", "a"] ["b", "b"] ["c", "c"]用 Set 实现交集、并集、差集
let arr1= new Set([1, 2, 3]) let arr2= new Set([4, 3, 2]) let intersect = new Set([...arr1].filter(value => arr2.has(value))) let union = new Set([...arr1, ...arr2]) let difference = new Set([...arr1].filter(value => !arr2.has(value))) console.log(intersect) // Set {2, 3} console.log(union) // Set {1, 2, 3, 4} console.log(difference) // Set {1}Map 集合
Map 集合是以键值对的形式存储数据,键名不能重复,这也是Map 与Set 的不同点
键名相同,新添加的值将会覆盖前面的值
const m = new Map(); m.set(9, 'a') .set(9, 'b'); m.get(9); // "b"Map 可以是一个数组作为参数
const m = new Map([ ['1', 'green'], ['2', 'red'] ]); m.size; //2 m.has('1') //true m.get('1') //"green" m.has('2') //true m.get('2') //"red"Map 集合的实例对象方法: 其余的几个方法和Set的一样
get(key): 通过键值查找特定的数值并返回Map转为Obj Map 的键名为对象,而 Object 的键名都为字符串,所以转换时将非字符串键名转换为字符串键名
function fun(m) { let obj = Object.create(null) for (let [key, value] of m) { obj[key] = value } return obj } const m = new Map().set('uname', 'Ya').set('age', 18) fun(m) // {uname: "Ya", age: 18}Obj转为Map
function fun(obj) { let m= new Map() for (let key of Object.kes(obj)) { m.set(key, obj[key]) } return m } fun({uname: "Ya", age: 18})WeakSet 集合
内部存储地址不会影响到垃圾回收机制只能添加对象不能遍历,不是一个可迭代对象,没有size属性也没有foreach方法属性: constructor:构造函数
方法:
add(value):在WeakSet 对象中添加一个元素valuehas(value):判断 WeakSet 对象中是否包含valuedelete(value):删除元素 valueWeakMap 集合
WeakMap 对象是一组键值对的集合
属性: constructor:构造函数
方法:
has(key):判断是否有 key 关联对象get(key):返回key关联对象(没有则则返回 undefined)set(key):设置一组key关联对象delete(key):移除 key 的关联对象与WeakSet 集合类似
键名只能是对象,只接受对象作为键名(null除外)键名所指向的对象可以被垃圾回收,此时键名是无效的不能遍历