Set 和 Map
一、Set
-
松散结构,添加删除速度快,存储没有顺序,不能排序,查找速度块
-
不可以使用 for in 和 for 遍历
-
有专门的迭代器遍历方法 for of
-
不存储相同的数据,没有重复内容
-
语法:
- new Set().add() 添加
- 一次只能添加一个
- new Set().delete() 删除
- new Set().clear() 清空集合
- new Set().add() 添加
var s = new Set();
s.add(3);
s.add(4);
s.add(5);
console.log(s); //Set(3) {3, 5, 6}
s.delete(3);
console.log(s); //Set(2) { 5, 6}
s.clear();
console.log(s); //Set(0) {}
- 在 new Set()的时候可以放入任何迭代器内容
var s = new Set(document.querySelectorAll('div'));
console.log(s); //Set(4) {div.div1, div.div1, div, div}
for of 迭代器遍历方法
- for of 仅能用于迭代器对象遍历
- 拥有 Symbol.iterator 该属性的就是迭代器对象
- 数组、document 获取元素方法返回的数组、
二、WeakSet
- 只能添加引用类型,不能遍历
三、Mpa
- 是键值对,代表键唯一对应一个值
- Map 的键可以使任意类型,对象的值只能是字符或者 Symbol
- Mpa 是有大小的。就是存储的数据的多少,对象是没有长度的
entries 将对象转换为迭代器
formEnteries 将迭代器转换为对象
var m = new Map(Object.entries({ a: 1, b: 2, c: 3 }));
console.log(m); //Map(3) {'a' => 1, 'b' => 2, 'c' => 3}
- set 设置 key 和 value 添加在 Map 中
- new Map().set( key, value )
- 可以映射存储
- get 根据 key 获取 value
var m = new Map();
var o1 = { a: 1 };
var o2 = { a: 2 };
var o3 = { a: 3 };
var o4 = { a: 4 };
// set 设置key和value添加在Map中
m.set(o1, o2);
m.set(o2, o3);
m.set(o3, o4);
console.log(m);
// Map(3) {{…} => {…}, {…} => {…}, {…} => {…}}
/*
Map 内容
0: {Object => Object}
1: {Object => Object}
2: {Object => Object}
*/
// get 根据key获取value
console.log(m.get(o1)); //o2 {a:1}
console.log(m.get(o2)); //o3 { a:3 }
console.log(m.get(o3)); //o4 {a:4}
- delete 根据 key 删除对应的 value
m.delete(o1);
console.log(m);
// Map(2) {{…} => {…}, {…} => {…}}
/*
0: {Object => Object}
1: {Object => Object}
*/
- clear 清空 Map 中的内容
m.clear();
console.log(m);
//Map(0) {size: 0}
- has 根据 key 判断是否存储这个数据
console.log(m.has(o1));
// true
- key 获取所有 Key 形成的迭代器
for (var key of m.keys()) {
console.log(key);
/*
{a: 1} // o1
{a: 2} // o2
{a: 3} // o3
*/
}
- value 获取所有 value 形成的迭代器
for (var value of m.value()) {
console.log(value);
/*
{a: 2} // o2
{a: 3} // o3
{a: 4} // o4
*/
}
- entries 获取所有 entries 形成的迭代器
for (var [key, value] of m.entries()) {
console.log(key, value);
/*
{a: 1} {a: 2} // o1 ~ o2
{a: 2} {a: 3} // o2 ~ o3
{a: 3} {a: 4} // o3 ~ o4
*/
}
四、WeakMap
- 弱引用类型的 Map