Set集合
Set集合是一种没有重复元素、有序列表,一般的我们不会像访问数组一样逐一的访问每个元素,通常的做法是检测给定的值在某个集合中是否存在;通过Set集合可以快速访问其中的数据,更有效的追踪各种离散值
ES6中Set集合的使用
1.创建Set
const s1 = new Set();
2.添加元素
s1.add(1)
s1.add(2)
s1.add(3)
s1.add(1) //无效的
console.log(s1)
3.删除元素
console.log(s1.delete(1))//true
console.log(s1.delete(10))//flase
查:has
console.log(s1.has(1))//truef
console.log(s1.has(10))//flase
set长度:size(只能读,不能改)
console.log(s1.size)
遍历
for of
for(const item of s1){
console.log(item)
}
重写的实例方法 forEach
s1.forEach((item,index,s) => {
(item,index,s)
})
//index 不是下标,set集合没有下标
//forEach中的第一个参数的值和第二个参数的值是相同的,都表示set中的每一项
console.log(item,index,s)
WeakSet
使用该集合,可以实现和set一样的功能但也有一定的限制
1.内部存储地址不会影响垃圾回收
2. 只能添加对象
3. 3.不能遍历,不是一个可迭代的对象,没有size属性,没有foreach方法
let obj = {
name : "jack",
age : 18
}
const set = new WeakSet();
set.add(obj);
obj = null;
console.log(set)
Map集合
ES6中的Map类型是一种存储着许多键值对的有序列表。其中最为重要的是:Map集合的键名和值支持任意类型的数据
对象存储的问题
1.键名只能是字符串
2. 获取数据的数量的时候不方便
3. 键名容易和原型上的名称发生冲突
ES6中Map集合的使用
1.创建
// 创建map对象
let map = new Map();
// set() 设置键值对
map.set('title', 'map title');
// get() 获取键对应的值, 不存在则返回undefined
map.get('title'); // map title
Map集合内支持所有的数据类型,所以我们可以这么做:
let map = new Map();
let obj1 = {};
let obj2 = {};
map.set(obj1, 1);
map.set(obj2, 2);
// 获取值
map.get(obj1); // 1
map.get(obj2); // 2
Map集合的方法
let map = new Map();
// has(key): 检测键名是否存在
map.has('title');
// delete(key): 删除指定的键名和其值
map.delete('title');
// clear(): //清空所有键值对
map.clear();
遍历
for(const item of map){
console.log(item[0],item[1])
}
forEach
map.forEach((value,key,map) => {
console.log(value,key,map)
// value 值
// key 键
// map 对象本身
})
WeakMap
1.内部存储地址不会影响垃圾回收
2.键名只能对象
3.不能遍历,不是一个可迭代的对象,没有size属性,没有foreach方法
let obj = {
name : "jack",
age : 18
}
const map = new WeakMap();
map.set(obj,123);
obj = null;
console.log(map)