ES6(Set-Map数据结构)
2020-04-28 本文已影响0人
KATENGC
一、Set集合
- Set利用add添加元素
- 获取Set集合的长度用size
Set集合有两种定义方法
方法一:
{
let list = new Set();
//Set集合要通过add添加元素
list.add(5);
list.add(7);
//获取Set的长度要用size
console.log('size', list.size);//2
}
方法二:
{
let arr = [1, 2, 3, 4, 5];
let list = new Set(arr);
console.log('size', list.size);//5
}
二、Set集合的元素是唯一的
{
let list = new Set();
list.add(1);
list.add(2);
list.add(1);//不生效
console.log('list', list);//{1, 2}
//利用这个特性,可用于元素去重
let arr = [1, 2, 3, 1, 2];
let list2 = new Set(arr);
console.log('unique', list2);//{1, 2, 3}
//需要注意,Set不会做元素类型的转换
let arr2 = [1, 2, 3, 1, '2'];
let list3 = new Set(arr2);//此处Set集合中数值2 和 字符串2 不是同一个元素,不会被去重
console.log('unique', list3);//{1, 2, 3, "2"}
}
三、Set集合add delete clear has 方法
{
let arr = ['add', 'delete', 'clear', 'has'];
let list = new Set(arr);
console.log('has', list.has('add'));//true
console.log('delete', list.delete('add'), list);//true {"delete", "clear", "has"}
list.clear();
console.log('clear', list);//{}
}
四、Set集合的遍历
{
let arr = ['add', 'delete', 'clear', 'has'];
let list = new Set(arr);
//方法一
for (let key of list.keys()) {
console.log('keys', key);
}
//方法二
for (let value of list.values()) {
console.log('values', value);
}
//方法三 此处不加values 遍历返回的也是value,同方法二
for (let value of list) {
console.log('values', value);
}
//方法四
for (let [key, value] of list.entries()) {
console.log('entries', key, value);
}
list.forEach(item => {
console.log(item);
})
}
五、WeakSet 和 Set
WeakSet和Set 的区别
- WeakSet 和 Set 支持的数据类型不一样,WeakSet只能接收对象
- WeakSet的对象是弱引用,不会跟垃圾回收机制挂钩
- WeakSet没有clear方法、没有set属性,不能遍历
{
let weakList = new WeakSet();
let arg = {a: 1, b: 2};
weakList.add(arg);
// weakList.add(2);//会报错Invalid value used in weak set,因为WeakSet只能接收对象
console.log('weakList', weakList);
}
六、Map
- Map利用map.set(key,value)添加元素
- 获取Map的值用map.get(key)的方式
Map的定义方法:
{
let map = new Map();
let arr = ['123'];
//Map添加元素用set
map.set(arr, 456);
//Map用get获取值
console.log('map', map, map.get(arr));
}
方法二
{
//注意结构:接收数组类型,数组里面还是数组
let map = new Map([['a', 123], ['b', 456]]);
console.log('map', map);
//获取map的长度 用size
console.log('size', map.size);
console.log('delete', map.delete('a'), map);
console.log('clear', map.clear(), map);
//Map的遍历同Set,此处不举例
}
另外:Map的set delete clear方法 与 Set相同;Map的遍历与 Set 相同
{
//注意结构:接收数组类型,数组里面还是数组
let map = new Map([['a', 123], ['b', 456]]);
console.log('map', map);
console.log('delete', map.delete('a'), map);
console.log('clear', map.clear(), map);
}
七、WeakMap 和 Map
WeakMap 和 Map的区别(同WeakSet 和 Set的区别)
- WeakMap 和 Map 支持的数据类型不一样,WeakMap只能接收对象
- WeakMap的对象是弱引用,不会跟垃圾回收机制挂钩
- WeakMap没有clear方法、没有set属性,不能遍历
{
let weakmap = new WeakMap();
let o = {};
weakmap.set(o, 124);
console.log(weakmap.get(o));//124
}