js系列-Set集合和WeakSet弱引用

手把手教你用Python实现ITRS与GCRS坐标转换(附完整代码) 本文详细介绍了如何使用Python的Astropy库实现ITRS与GCRS坐标转换。文章从环境配置、坐标对象构建入手,深入解析了transform_to方法背后的转换矩阵与地球定向参数管理,并通过卫星地面轨迹计算实战案例,帮助开发者掌握高精度空间坐标转换的核心技术与工程实践。 阅读详情

Set

Set对象是值的集合, Set中的元素只会出现一次,即 Set 中的元素是唯一的,无论是基本类型还是对象引用。

    let set = new Set([1, 1, '1', { name: 'zhang' }, [1, 2, 3]]);
    console.log(set);//Set(4) {1, "1", {…}, Array(3)}

通过上面简单的定义我们可以发现几个问题: 

  • 虽然Set定义是{..}对象,但只有值没有key键名
  • 是严格类型检测如字符串数字不等于数值型数字,即1和'1'不等
  • 和数组不同的是数组有重复项,而Set的值是唯一的

属性 

size

 Set 对象中的值的个数,类似数组length属性

    let set = new Set([1, '1', { name: 'zhang' }, [1, 2, 3]]);
    console.log(set.size);//4

方法

add

在Set对象尾部添加一个元素。返回该Set对象。

    let set = new Set(['a','b']);
    console.log(set.add('c'));//Set(3) {"a", "b", "c"}

delete

删除单个元素,返回值为boolean类型

    let set = new Set(['a','b']);
    console.log(set.delete('b'));//true
    console.log(set.delete('c'));//false

clear

移除Set对象内的所有元素,无返回值

    let set = new Set(['a','b']);
    console.log(set.clear());//undefined

has

检查元素是否存在,返回值为boolean类型

    let set = new Set(['a','b']);
    console.log(set.has('b'));//true
    console.log(set.has('c'));//false

遍历

    let set = new Set(['a','b']);
    for (const item of set) {
        console.log(item);//'a'  'b'
    }

    for (const item of set.keys()) {
        console.log(item); // 'a' 'b'
    }
    for (const item of set.values()) {
        console.log(item); // 'a' 'b'
    }
    for (const item of set.entries()) {
        console.log(item); // ["a", "a"]  ["b", "b"]
    }

数组转换

数组章节我们已经讲过转换方法有两种,点语法和Array.form 静态方法,可以将set转换为数组,就可以使用数组的一些便捷方法。

    let set = new Set(['a', 'b']);
    console.log(Array.from(set));//["a", "b"]
    console.log([...set]); //["a", "b"]

转换成数组后,使用数组的filter方法过滤set数据:

    //使用数组方法,取小于3的数据
    let set = new Set([1, 2, 3, 4, 5]);
    set = new Set([...set].filter(item => item < 3));
    console.log(set);//Set(2) {1, 2}

    //使用set方法,同样取小于3的数据
    let set1 = new Set([1, 2, 3, 4, 5]);
    set1.forEach(item => {
      if (item >= 3) {
        set1.delete(item);
      }
    })
    //或则
    // for (const item of set1) {
    //   if (item >= 3) {
    //     set1.delete(item);
    //   }
    // }
    console.log(set1);

数组去重

我们另一个用的比较多的就是,把数组转Set去除重复元素;当然这是指接收到的外部数据存在重复元素需要去重,如果是我们自己定义的话,可以直接定义为Set类型。

    //外部传过来的数据
    let arr = [1, 2, 3, 4, 5, 3, 1];
    arr = [...new Set(arr)];
    console.log(arr);//[1, 2, 3, 4, 5]

数组中的并集/交集/差集/补集

    let arr1 = [1, 2, 3, 8, 9];
    let arr2 = [2, 8, 5, 6];

    //并集(即两个数组都存在的元素)
    console.log(arr1.concat(arr2.filter(item => !arr1.includes(item))));//[1, 2, 3, 8, 9, 5, 6]
    //交集(即两数组共同拥有的元素),以上实例交集为[2, 8]
    console.log(arr1.filter(item => arr2.includes(item)));// [2, 8]
    //差集(数组arr1中有,数组arr2中没有的元素)
    console.log(arr1.filter(item => !arr2.includes(item)));// [1, 3, 9]
    //补集(去除arr1和arr2中都有的元素之后的所有元素)
    console.log(arr1.filter(item => !arr2.includes(item)).concat(
      arr2.filter(item => !arr1.includes(item))
    ))//[1, 3, 9, 5, 6]

Set的并集/交集/差集/补集

    let set1 = new Set([1, 2, 3, 9]);
    let set2 = new Set([2, 5]);
    console.log(set1, set2)
    //并集
    console.log(new Set([...set1, ...set2]))//Set(5) {1, 2, 3, 9, 5}
    //交集
    console.log(new Set([...set1].filter(item => set2.has(item))))//Set(1) {2}
    //差集
    console.log(new Set([...set1].filter(item => !set2.has(item))))//Set(3) {1, 3, 9}
    //补集
    console.log(new Set([...set1].filter(item => !set2.has(item)).concat(
      [...set2].filter(item => !set1.has(item))
    )))//Set(4) {1, 3, 9, 5}

WeakSet

WeakSet 和 Set 类似,都是不重复的值的集合,但是和 Set 有两点不同:

  1. WeakSet 的成员只能是对象
  2. WeakSet 的对象都是弱引用

即WeakSet 中对对象的引用不会被考虑进垃圾回收机制,即只要没有其他的对象引用该对象,则该对象就会被回收,而不管它在不在 WeakSet,​ (由于这个特性,所以 WeakSet 适合临时存放一组对象和跟对象绑定的信息) ​

3. WeakSet 没有size属性,没法遍历(故没有 forEach 方法)
因为 WeakSet 中有多少个成员取决于(没有其他对象对WeakSet成员的引用后)垃圾回收机制有没有运行,运行前后可能成员的个数是不一样的,而垃圾回收机制何时运行是不可预测的,所以 ES6 规定 WeakSet 不能被遍历

WeakSet 的应用场景/ 好处

用于存储DOM节点,而不用担心这些节点从文档移除时会引发内存泄露
即可以用来避免内存泄露的情况

WeakSet 的语法

  1. WeaSet 是一个构造函数,通过 new WeakSet() 可生成一个实例

WeakSet作为构造函数:可接收数组或类数组对象作为其参数:则数组的所有成员 都会自动成为 WeakSet 对象的成员

注:
(1) 数组的成员只能是对象(因为WeakSet的成员只能是对象)
(2) 成为 WeakSet 的成员的是数组的成员,而不是数组本身。

WeakSet 有三个方法:add, delete, has
WeakSet.prototype.add(value) 向WeakSet 实例添加一个成员
WeakSet.prototype.delete(value) 清除 WeakSet 实例的指定成员
WeakSet.prototype.has(value) 判断某个值是否在WeakSet 实例中,返回布尔值

科研党必备:5分钟搞定MATLAB闪退问题(含R2020a-R2023b各版本适配) 本文针对科研人员常见的MATLAB闪退问题,提供了从R2020a到R2023b各版本的适配解决方案。通过分析六大诱因和版本定制化修复方法,帮助用户快速诊断和解决闪退问题,包括内存优化、高级调试和预防性维护等实用技巧,确保科研计算的连续性和稳定性。 阅读详情

相关推荐

深入解析Simulink中的条件执行子系统:If Action与Switch Case的实战应用

本文深入解析了Simulink中两种核心的条件执行子系统:If Action Subsystem与Switch Case Action Subsystem。通过实战案例详细阐述了其工作原理、正确搭建方法以及与逻辑控制器(If模块/Switch Case模块)的协同机制,帮助工程师实现清晰、可维护的多分支逻辑控制,并规避常见建模错误。

l3m4n的博客 427

初识WeakSet

初始WeakSet ECMAScript 6 新增的“弱集合”(WeakSet)是一种新的集合类型,为这门语言带来了集合数据结构。WeakSet 是 Set的“兄弟”类型,其 API 也是 Set 的子集。WeakSet中的“weak”(弱),描述的是 JavaScript 垃圾回收程序对待“弱集合”中值的方式。 基本 API 可以使用 new 关键字实例化一个空的 WeakSet: const ws = new WeakSet(); 弱集合中的值只能是 Object或者继承自 Object 的类型,.

qq_45768871的博客 1690

ChatBI告别“NL2SQL依赖症”!从准确率50%到90%,3大技术路线+4个企业案例拆解核心玩法

摘要: ChatBI通过自然语言交互实现数据民主化,其核心是“语义理解+数据执行+知识沉淀”的全链路能力,而非单一的NL2SQL技术。行业采用三大技术路线提升准确率:专有知识库(提升30%)、指标标签语义层(准确率85%)、JSON中间层(多轮对话提升25%)。数据执行方案包括NL2SQL、NL2API等,需结合场景选择。企业落地需解决四大痛点:跨表查询准确率低(引入拓扑图)、模糊查询(用户干预机制)、响应慢(预计算缓存)、多轮对话(上下文池)。Spring AI Alibaba提供轻量级集成方案,助力企业

weixin_52610848的博客 1652

weakMap和weakSet

一、weakSet 1.1 什么是weakSet weakSet和Set一样,里面只能存放内容不相同的值 1.2 和Set有什么区别 1、weakSet内部只能存放对象类型的数据,不能存放其他类型的数据,会报错 const ws = new WeakSet(); ws.add(1) // TypeError: Invalid value used in weak set ws.add(Symbol()) // TypeError: invalid value used in weak se..

weixin_49343253的博客 1263

STM32开发者必看:如何在正点原子探索者开发板上快速移植CANopenNode协议栈

本文为STM32开发者提供了在正点原子探索者开发板上快速移植CANopenNode协议栈的实战指南。文章详细介绍了从环境准备、硬件抽象层适配到协议栈初始化与测试的全过程,并分享了PDO配置与性能优化等关键技巧,帮助开发者高效实现CANopen标准化通信。

weixin_29173777的博客 462

数字IC后端设计实战:从floorplan到powerplan的优化策略

本文深入探讨了数字IC后端设计中从Floorplan到Powerplan的核心优化策略。文章强调了Floorplan作为布局基础的重要性,并详细解析了Powerplan规划,特别是针对低功耗设计中MTCMOS的应用与IR Drop分析。通过实战经验分享,提供了从模块摆放到电源网络构建、再到IR Drop问题层层递进的解决方案,旨在帮助后端工程师构建稳健高效的芯片物理设计。

weixin_28338005的博客 346

WeakSet:JavaScript 中容易被忽视的“弱集合”

WeakSet 的优势在于通过弱引用机制自动管理对象内存,避免内存泄漏,特别适合需要临时跟踪对象(如 DOM 元素)且不干扰垃圾回收的场景

mutuyxy的博客 701

Dr_can Kalman Filter学习笔记(一)

本文是在b站Dr_can的卡尔曼滤波课程学习过程中的学习笔记

苏大侠的博客 1051

ES6中的WeakMap和WeakSet:特性和用途

在我们深入研究这两种新的数据结构之前,首先来了解一下它们的基本特性。

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 2841

嵌入式Linux网络调试:YT8531/YT8521 PHY驱动移植与设备树配置避坑指南

本文深入解析嵌入式Linux系统中YT8531/YT8521 PHY驱动移植与设备树配置的关键技术,涵盖内核驱动适配、RGMII接口时序调整及常见问题排查。针对Motorcomm千兆以太网PHY芯片,提供详细的设备树配置示例和调试技巧,帮助开发者规避典型设计陷阱,确保网络功能稳定运行。

weixin_42525632的博客 671

Coverity本地增量C/C++代码检查(Linux)操作简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

1482

Set和weakSet Map和WeakMap

5.WeakSet它是弱引用,在weakSet里面引用了对象,垃圾回收机制不会考虑该对象的引用,若外面已经没有了该对象的引用,则垃圾回收机制会回收该对象,weakSet内部引用的该对象也会自动消失,所以他内部的对象不适合被引用,也不允许便利,2.Map是一组键直对的数据局结构,我们知道普通的对象,他的key只能是字符串类型的,但是Map他的key不限制于字符串,可以是函数 可以是对象包含任何类型。WeakSet 是类似于 Set 的集合,它仅存储对象,并且一旦通过其他方式无法访问它们,便会将其删除。

qq_24418107的博客 1402

13、使用 Mathematica 撰写文本

本文详细介绍了如何使用 Mathematica 进行文本撰写与处理。内容涵盖文本输入、格式设置、结构化排版、超链接插入、翻译与拼写检查工具的使用,以及将笔记本导出为多种格式(如 PDF、HTML、LATEX 和 RTF)的方法。通过实例演示了创建专业文档的完整流程,包括样式设置、公式推导、标题编号、页眉页脚配置等操作。适合希望利用 Mathematica 编写学术论文、技术报告或教学资料的用户参考。

sony5的博客 208

JavaScript中的Set、Map、WeakSet、WeakMap详解

Set是ES6引入的一种新的数据结构,它允许我们存储任何类型的数据,但每个元素只能出现一次。换句话说,Set中的元素是唯一的,不允许有重复值。Map也是ES6引入的一种新的数据结构,它允许我们存储键值对(key-value pairs)。与普通对象不同,Map的键可以是任意数据类型,包括对象、函数等。WeakSet与Set类似,但它存储的引用是弱引用。这意味着如果WeakSet中引用的某个对象没有其他强引用指向它,垃圾回收机制可能会回收该对象,而不会考虑它是否存在于WeakSet中。

在所有的事情背后,要有一颗坚定的的本心,要有一颗应对变革和提升自我的本心,世界瞬息万变,本心要坚持到底,保持学习,时刻复盘 2038

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JS - 6 - Set 和 WeakSet - 弱引用

文章目录# 不可重复# 区分类型# 构造函数传字符串# API# 类型转换## 转换成数组## 转换成数组 - 应用1## 转换成数组 - 应用2# 遍历 Set 对象是 ES6 新增,特点:元素不重复。 # 不可重复 let set = new Set([1,1,2]); // 不可重复 console.log(set) ; # 区分类型 let set = new ...

LawssssCat的博客 941

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JS | 知识点总结 - Map 键值对 和 Set 集合 、WeakMap和WeakSet 等对比

名称类型是否弱引用键/值限制可被 GC 自动移除可枚举(forEach等)Map键值对❌ 否键任意类型❌ 否✅ 是WeakMap键值对✅ 是键必须是对象✅ 是❌ 否Set值集合❌ 否任意类型值❌ 否✅ 是WeakSet值集合✅ 是值必须是对象✅ 是❌ 否。

weixin_42479421的博客 607

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

全面解析 Map、WeakMap、Set、WeakSet

类似于Map,但是键只能是对象类型,且键名所指向的对象是弱引用这意味着如果这个对象在其他地方没有被引用,那么它将会被垃圾回收,这也是 WeakMap 的主要应用场景。类似于Set,但成员只能是对象类型,且成员对象是弱引用这意味着如果这个对象在其他地方没有被引用,那么它将会被垃圾回收,这也是 WeakSet 的主要应用场景。需要注意的是,WeakMap 和 WeakSet 的键是弱引用,这意味着垃圾回收机制可以自动回收不再被引用的键所对应的对象,而不用手动删除键或者值。

When you can't win by being better, you can win by being different. 1920

【JavaScript】WeakMap 和 WeakSet

Map 用于存储键值对。添加属性: 使用 Map 的 方法可以向 Map 对象中添加键值对。例如: 通过二维数组快速创建 map 键值对。 获取属性和长度: 使用 Map 的 方法可以根据键获取对应的值。使用 Map 的 属性可以获取 Map 对象中键值对的数量。例如: 遍历 Map 对象: 使用 Map 的 方法可以遍历 Map 对象的键值对。可以传入一个回调函数,对每个键值对执行相应的操作。例如: 删除属性: 使用 Map 的 方法可以根据键删除对应的键值对。例如: Ma

小秀的博客 1386

2025第2周 | JavaScript中Set/WeakSet和Map/WeakMap

在`ES6`之前,我们存储数据的结构主要有两种:数组、对象。在`ES6`中新增了另外两种数据结构:`Set`、`Map`,以及它们的另外形式`WeakSet`、`WeakMap`。`Set`是一个新增的数据结构,可以用来保存数据,类似于数组,但是和数组的区别是:**Set中的元素不能重复**。创建`Set`我们需要通过**Set构造函数**(暂时没有字面量创建的方式)

秋堂主的博客 1132

从 Set、Map 到 WeakSet、WeakMap 的进阶之旅

Set 和 Map 是可遍历的强引用集合,分别用于存储唯一值和键值对,而 WeakSet 和 WeakMap 是不可遍历的弱引用集合,仅接受对象作为键或值,适用于避免内存泄漏。

weixin_52648900的博客 1532

WeakMap和WeakSet使用场景

为了弥补这个问题,另外有WeakMap和WeakSet。WeakXXX的特点是:弱引用,存储对象,无序不可遍历,且没有size属性。如果对象除了作为的成员之外没有其他引用,那么它可以被垃圾回收器回收,即使它仍然在中。总结一下,这里提到了三种WeakMap的使用场景:缓存,存储监听事件引用的集合,存储私有属性。另外WeakMap还有存储临时数据、存储和Dom元素关联的数据,管理第三方库对象等其他用法,和WeakSet应用场景很多情况下是互通的,可以两者对比参照。

weixin_49164128的博客 2235

javascript 中Set与WeakSet 是什么?

Set类似于数组,可以存储任何类型的唯一值(无重复),包括基本类型和复杂类型。可以使用new Set()构造函数创建一个Set。可以使用add()方法向Set添加元素。可以使用delete()和clear()方法从Set中移除元素。可以使用for...of循环或forEach()方法遍历Set的元素。WeakSet只能包含对象,不能像Set那样包含任何类型的值。WeakSet内的引用对对象是弱引用。

xuxian的博客 1597

Set、WeakSet、Map及WeakMap

Set 和 Map 主要的应用场景在于 数据重组 和 数据储存 Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构 1. 集合(Set) ES6 新增的一种新的数据结构,类似于数组,但成员是唯一且无序的,没有重复的值。 Set 本身是一种构造函数,用来生成 Set 数据结构。 new Set([iterable]) 举个例子: const s = new Set() [1, 2,...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 1062

JavaScript中Set、Map、WeakSet、WeakMap区别详解

JavaScript集合类型对比摘要 Set/Map与WeakSet/WeakMap的核心区别在于引用强度和存储内容。Set存储唯一值,Map存储键值对,都是强引用;WeakSet只存储对象弱引用,WeakMap以对象为键的弱引用键值对。强引用类型(Set/Map)可遍历、有size属性,但可能内存泄漏;弱引用类型(WeakSet/WeakMap)不可遍历、无size属性,能自动回收未被引用的对象。Set适合去重和集合运算,Map适合键值字典,WeakSet适合临时对象集合,WeakMap适合对象元数据存储

油墨香^-^的博客 762

ES6中的Set和WeakSet

注意:我这里讲的Set和Map不是Array中原型对象的方法,而是ES6新规定的数据类型,类似Array,是JS中的内置对象。 所有的方法描述参考:MDN文档描述 以及阮一峰ES6教程 Set Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。 Set是一个构造函数,需要new来创建一个对象,有了Set对象可以很容易得到不重复的元素 const s = new Set(); ...

老曹的博客 4327

JavaScript 学习笔记【Set 和 WeakSet】

var setA = new Set([1,2,3,4,5,6]); var setB = new Set([5,6,7,8,9,10]); // 合集 Set.prototype.union = function( otherSet ){ return new Set([...this, ...otherSet ]); } setA.union(setB); // Set(10) {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} // 交集 Set.prototype.interse

灵台方寸山斜月三星洞 608
上一篇: js系列-Array数组详解
下一篇: js系列-Map和WeakMap
前端蜗牛君
博客等级 码龄10年 274粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值