欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ES6语法--新的数据结构Set/WeakSet那些事

程序员文章站 2023-12-21 13:15:40
...

Set/WeakSet

新的数据结构Set

代码的形式体现。

声明方式

常用方法

应用场景

WeakSet

/**
 * 新的数据结构 Set 无序,不可重复
 * 常用方法
 * 遍历方式
 * 应用场景
 * WeakSet
 * @Author: 毛毛 
 * @Date: 2021-09-11 21:01:52 
 * @Last Modified by: 毛毛
 * @Last Modified time: 2021-09-11 21:40:06
 */

// 定义一个Set
// const s1 = new Set();

// 定义一个Set,参数是可迭代对象
const s2 = new Set([1, 2, 2, 3]);
console.log(s2);//?
// 添加一个数据
s2.add(4);// s2 = //?
s2.add(5).add(6);
console.log(s2);

// 删除一个数据
s2.delete(2);// 返回值是是否删除成功
console.log(s2.delete(1), s2); //

// 集合set是否包含某个元素 has
console.log(s2.has(3), s2.has(7));

// 集合set的元素个数 size是属性 不是方法!
console.log(s2.size);

// 清空Set
s2.clear();
console.log(s2);


s2.add(1).add(2).add(3).add(4);//?

// 集合的遍历方式
s2.forEach(val => {
  console.log(val)// 1 2 3 4
})

// Set结构 有key 也有value 但是没有下标的概念
// 但是 key和value相同
// console.log(s2.keys(),s2.values());
for (const val of s2) {
  console.log(val);
}
for (const k of s2.keys()) {
  console.log(k);
}
for (const v of s2.values()) {
  console.log(v);
}
for (const entry of s2.entries()) {
  console.log(entry[0], entry[1], entry);
}

// 应用场景 
// 1. 数组去重
const s3 = new Set([1, 2, 3, 3, 2, 1]);
console.log(s3, s3.size);

// 数组合并,且去重
const s4 = new Set([...[1, 2, 3], ...[1, 2, 3, 4]]);
console.log(s4, s4.size, [...s4]);
// 使用Array.from() 转集合为数组
console.log(Array.from(s4));

// 求两个数组的交集
const a1 = [1, 2, 3, 3, , 4];
const a2 = [2, 3, 5];
const s5 = new Set(a1);
const s6 = new Set(a2);
const res = new Set(a1.filter(val => s6.has(val)));
console.log([...res]);// [2,3]

// 求两个数组的差集
const res2 = new Set(a1.filter(val => !s6.has(val)));
const res3 = new Set(a2.filter(val => !s5.has(val)));
console.log([...res2, ...res3]);// [1, 4, 5]


// TODO WeakSet 数据结构 只能存储对象
const ws1 = new WeakSet();//?

let obj1 = { name: "战三" };
const obj2 = { name: "lisi" };
ws1.add(obj1).add(obj2);//?
console.log(ws1.has(obj1));

// WeakSet 不可以遍历 存储的元素也只是弱引用
// ws1.forEach()

// 存储的元素也只是弱引用
// 弱引用 就是说垃圾回收机制不会考虑我们WeakSet里面引用了这个对象
// 只要原对象的引用断了,这个WeakSet里面记录的该元素也会自动消失

上一篇:

下一篇: