网站搭建大型公司企业电话查询黄页

news/2025/10/5 13:43:50/文章来源:
网站搭建大型公司,企业电话查询黄页,东营列表网,微信公众号手机app目录 set 1基本用法 2Set 实例的属性和方法 3遍历操作 3.1 keys() #xff0c; values() #xff0c; entries() 3.2 forEach() 3.3遍历的应用 weakset 含义 语法 总结 set 1基本用法 ES6 提供了新的数据结构 Set。它类似于数组#xff0c;但是成员的值都是唯一…目录 set 1基本用法 2Set 实例的属性和方法 3遍历操作 3.1 keys() values() entries() 3.2 forEach() 3.3遍历的应用 weakset 含义 语法 总结 set 1基本用法 ES6 提供了新的数据结构 Set。它类似于数组但是成员的值都是唯一的没有重复的值。 Set 本身是一个构造函数用来生成 Set 数据结构。 const s new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 上面代码通过 add 方法向 Set 结构加入成员结果表明 Set 结构不会添加重复的值。 Set 函数可以接受一个数组或者具有 iterable 接口的其他数据结构作为参数用来初始化。 // 例一 const set new Set([1, 2, 3, 4, 4]); [...set] // [1, 2, 3, 4] // 例二 const items new Set([1, 2, 3, 4, 5, 5, 5, 5]); items.size // 5 // 例三 function divs () { return [...document.querySelectorAll(div)]; } const set new Set(divs()); set.size // 56 // 类似于 divs().forEach(div set.add(div)); set.size // 56 上面代码中例一和例二都是 Set 函数接受数组作为参数例三是接受类似数组的对象作为参数。 上面代码中也展示了一种去除数组重复成员的方法。 // 去除数组的重复成员 [...new Set(array)] 向 Set 加入值的时候不会发生类型转换所以 5 和 5 是两个不同的值。Set 内部判断两个值是否不同使用的算法叫做“Same-value equality”它 类似于精确相等运算符 主要的区别是 NaN 等于自身而精确相等运算符认为 NaN 不等于自身。 let set new Set(); let a NaN; let b NaN; set.add(a); set.add(b); set // Set {NaN} 上面代码向 Set 实例添加了两个 NaN 但是只能加入一个。这表明在 Set 内部两个 NaN 是相等。 另外两个对象总是不相等的 let set new Set(); set.add({}); set.size // 1 set.add({}); set.size // 2 上面代码表示由于两个空对象不相等所以它们被视为两个值 2Set 实例的属性和方法 Set 结构的实例有以下属性。 Set.prototype.constructor 构造函数默认就是 Set 函数。 Set.prototype.size 返回 Set 实例的成员总数。 Set 实例的方法分为两大类操作方法用于操作数据和遍历方法用于遍历成员。下面先介绍四个操作方法。 add(value) 添加某个值返回 Set 结构本身。 delete(value) 删除某个值返回一个布尔值表示删除是否成功。 has(value) 返回一个布尔值表示该值是否为 Set 的成员。 clear() 清除所有成员没有返回值。 上面这些属性和方法的实例如下。 s.add(1).add(2).add(2); // 注意2被加入了两次 s.size // 2 s.has(1) // true s.has(2) // true s.has(3) // false s.delete(2); s.has(2) // false 下面是一个对比看看在判断是否包括一个键上面 Object 结构和 Set 结构的写法不同 // 对象的写法 const properties { width: 1, height: 1 }; if (properties[someName]) { // do something } // Set的写法 const properties new Set(); properties.add(width); properties.add(height); if (properties.has(someName)) { // do something } Array.from 方法可以将 Set 结构转为数组。 const items new Set([1, 2, 3, 4, 5]); const array Array.from(items); 这就提供了去除数组重复成员的另一种方法。 function dedupe(array) { return Array.from(new Set(array)); } dedupe([1, 1, 2, 3]) // [1, 2, 3] 3遍历操作 Set 结构的实例有四个遍历方法可以用于遍历成员。 keys() 返回键名的遍历器 values() 返回键值的遍历器 entries() 返回键值对的遍历器 forEach() 使用回调函数遍历每个成员 需要特别指出的是 Set 的遍历顺序就是插入顺序。这个特性有时非常有用比如使用 Set 保存一个回调函数列表调用时就能保证按照添加顺序调用。 3.1 keys() values() entries() keys 方法、 values 方法、 entries 方法返回的都是遍历器对象详见《Iterator 对象》一章。由于 Set 结构没有键名只有键值或者说键名和键值 是同一个值所以 keys 方法和 values 方法的行为完全一致。 let set new Set([red, green, blue]); for (let item of set.keys()) { console.log(item); } // red // green // blue for (let item of set.values()) { console.log(item); } // red // green // blue for (let item of set.entries()) { console.log(item); } // [red, red] // [green, green] // [blue, blue] 上面代码中 entries 方法返回的遍历器同时包括键名和键值所以每次输出一个数组它的两个成员完全相等。 Set 结构的实例默认可遍历它的默认遍历器生成函数就是它的 values 方法。 Set.prototype[Symbol.iterator] Set.prototype.values // true 这意味着可以省略 values 方法直接用 for...of 循环遍历 Set。 let set new Set([red, green, blue]); for (let x of set) { console.log(x); } // red // green // blue 3.2 forEach() Set 结构的实例与数组一样也拥有 forEach 方法用于对每个成员执行某种操作没有返回值。 set new Set([1, 4, 9]); set.forEach((value, key) console.log(key : value)) // 1 : 1 // 4 : 4 // 9 : 9 上面代码说明 forEach 方法的参数就是一个处理函数。该函数的参数与数组的 forEach 一致依次为键值、键名、集合本身上例省略了该参数。这 里需要注意Set 结构的键名就是键值两者是同一个值因此第一个参数与第二个参数的值永远都是一样的。 另外 forEach 方法还可以有第二个参数表示绑定处理函数内部的 this 对象。 3.3遍历的应用 扩展运算符 ... 内部使用 for...of 循环所以也可以用于 Set 结构。 let set new Set([red, green, blue]); let arr [...set]; // [red, green, blue] 扩展运算符和 Set 结构相结合就可以去除数组的重复成员 let arr [3, 5, 2, 2, 5, 5]; let unique [...new Set(arr)]; // [3, 5, 2] 而且数组的 map 和 filter 方法也可以用于 Set 了。 let set new Set([1, 2, 3]); set new Set([...set].map(x x * 2)); // 返回Set结构{2, 4, 6} let set new Set([1, 2, 3, 4, 5]); set new Set([...set].filter(x (x % 2) 0)); // 返回Set结构{2, 4} 因此使用 Set 可以很容易地实现并集Union、交集Intersect和差集Difference。 let a new Set([1, 2, 3]); let b new Set([4, 3, 2]); // 并集 let union new Set([...a, ...b]); // Set {1, 2, 3, 4} // 交集 let intersect new Set([...a].filter(x b.has(x))); // set {2, 3} // 差集 let difference new Set([...a].filter(x !b.has(x))); // Set {1} 如果想在遍历操作中同步改变原来的 Set 结构目前没有直接的方法但有两种变通方法。一种是利用原 Set 结构映射出一个新的结构然后赋值给原 来的 Set 结构另一种是利用 Array.from 方法 // 方法一 let set new Set([1, 2, 3]); set new Set([...set].map(val val * 2)); // set的值是2, 4, 6 // 方法二 let set new Set([1, 2, 3]); set new Set(Array.from(set, val val * 2)); // set的值是2, 4, 6 上面代码提供了两种方法直接在遍历操作中改变原来的 Set 结构。 weakset 含义 WeakSet 结构与 Set 类似也是不重复的值的集合。但是它与 Set 有两个区别。 首先WeakSet 的成员只能是对象而不能是其他类型的值 const ws new WeakSet(); ws.add(1) // TypeError: Invalid value used in weak set ws.add(Symbol()) // TypeError: invalid value used in weak set 上面代码试图向 WeakSet 添加一个数值和 Symbol 值结果报错因为 WeakSet 只能放置对象。 其次WeakSet 中的对象都是弱引用即垃圾回收机制不考虑 WeakSet 对该对象的引用也就是说如果其他对象都不再引用该对象那么垃圾回收机 制会自动回收该对象所占用的内存不考虑该对象还存在于 WeakSet 之中。 这是因为垃圾回收机制依赖引用计数如果一个值的引用次数不为 0 垃圾回收机制就不会释放这块内存。结束使用该值之后有时会忘记取消引用导 致内存无法释放进而可能会引发内存泄漏。WeakSet 里面的引用都不计入垃圾回收机制所以就不存在这个问题。因此WeakSet 适合临时存放一 组对象以及存放跟对象绑定的信息。只要这些对象在外部消失它在 WeakSet 里面的引用就会自动消失。 由于上面这个特点WeakSet 的成员是不适合引用的因为它会随时消失。另外由于 WeakSet 内部有多少个成员取决于垃圾回收机制有没有运行 运行前后很可能成员个数是不一样的而垃圾回收机制何时运行是不可预测的因此 ES6 规定 WeakSet 不可遍历。 这些特点同样适用于本章后面要介绍的 WeakMap 结构 语法 WeakSet 是一个构造函数可以使用 new 命令创建 WeakSet 数据结构 const ws new WeakSet(); 作为构造函数WeakSet 可以接受一个数组或类似数组的对象作为参数。实际上任何具有 Iterable 接口的对象都可以作为 WeakSet 的参数。 该数组的所有成员都会自动成为 WeakSet 实例对象的成员。 const a [[1, 2], [3, 4]]; const ws new WeakSet(a); // WeakSet {[1, 2], [3, 4]} 上面代码中 a 是一个数组它有两个成员也都是数组。将 a 作为 WeakSet 构造函数的参数 a 的成员会自动成为 WeakSet 的成员。 注意是 a 数组的成员成为 WeakSet 的成员而不是 a 数组本身。这意味着数组的成员只能是对象 const b [3, 4]; const ws new WeakSet(b); // Uncaught TypeError: Invalid value used in weak set(…) 上面代码中数组 b 的成员不是对象加入 WeaKSet 就会报错。 WeakSet 结构有以下三个方法。 WeakSet.prototype.add(value)向 WeakSet 实例添加一个新成员。 WeakSet.prototype.delete(value)清除 WeakSet 实例的指定成员。 WeakSet.prototype.has(value)返回一个布尔值表示某个值是否在 WeakSet 实例之中。 下面是一个例子。 const ws new WeakSet(); const obj {}; const foo {}; ws.add(window); ws.add(obj); ws.has(window); // true ws.has(foo); // false ws.delete(window); ws.has(window); // false WeakSet 没有 size 属性没有办法遍历它的成员。 ws.size // undefined ws.forEach // undefined ws.forEach(function(item){ console.log(WeakSet has item)}) // TypeError: undefined is not a function 上面代码试图获取 size 和 forEach 属性结果都不能成功。 WeakSet 不能遍历是因为成员都是弱引用随时可能消失遍历机制无法保证成员的存在很可能刚刚遍历结束成员就取不到了。WeakSet 的一个 用处是储存 DOM 节点而不用担心这些节点从文档移除时会引发内存泄漏。 下面是 WeakSet 的另一个例子。 const foos new WeakSet() class Foo { constructor() { foos.add(this) } method () { if (!foos.has(this)) { throw new TypeError(Foo.prototype.method 只能在Foo的实例上调用); } } } 上面代码保证了 Foo 的实例方法只能在 Foo 的实例上调用。这里使用 WeakSet 的好处是 foos 对实例的引用不会被计入内存回收机制所以删除实 例的时候不用考虑 foos 也不会出现内存泄漏。 总结 本博客源于本人阅读相关书籍和视频总结创作不易谢谢点赞支持。学到就是赚到。我是歌谣励志成为一名优秀的技术革新人员。 欢迎私信交流一起学习一起成长。 推荐链接 其他文件目录参照 “睡服“面试官系列之各系列目录汇总建议学习收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:AugmentFree:解除 AugmentCode 限制的终极方案 如何快速清理vscode和AugmentCode缓存—windows端

完整教程:AugmentFree:解除 AugmentCode 限制的终极方案 如何快速清理vscode和AugmentCode缓存—windows端pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

文件的物理结构II

索引分配 允许文件离散地分配在各磁盘块中,系统会为每一个文件建一张索引表 表中记录了文件的哥哥逻辑块对应的物理快 索引表中存放的磁盘块叫索引块 文件数据存放的磁盘块叫数据块 类似于页表 索引分配方式可以支持随…

白城网站建设哪家好金华百度推广公司

http状态码 后端调试 f8:逐行执行 f7:进入语句内部 f9:执行到下一个断点 前端调试 f10:逐行调试 f11:进入语句内部 f8:执行到下一个断点 日志 按照级别开启日志 日志的测试类 比如把application里…

03-delphi10.3下PDFium5.8的PdfView1显示相关

03-delphi10.3下PDFium5.8的PdfView1显示相关procedure TForm2.Button3Click(Sender: TObject); //正常显示 beginPdfView1.Width:= 420;PdfView1.Height:=594; end;procedure TForm2.Button4Click(Sender: TOb…

【开源程序】 黑客帝国系列系统监控软件:基于PyQt5的全方位资源监控系统

【开源程序】 黑客帝国系列系统监控软件:基于PyQt5的全方位资源监控系统2025-10-05 13:26 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: a…

ABC426

ABC426C. Upgrade Required 开一个桶来维护每种版本的电脑数量,一开始每个桶中的电脑数都是 \(1\) 用变量 \(r\) 来维护“第一个可能非空的版本号”,并且 \(r\) 只会单调递增。每次操作把 \(r\) 指向的连续若干个桶(…

muse cc 做网站wordpress 中文社区

商家转账到零钱是什么? 通过商家转账到零钱这个功能,如果我们系统需要对用户支付费用,比如发放佣金、提成、退款之类的,可以直接转账到用户的微信零钱。 【商家转账到零钱】是【企业付款到零钱】的升级版,2022年5月1…

完整教程:OS9.【Linux】基本权限(下)

完整教程:OS9.【Linux】基本权限(下)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

wordpress一个主站多个子站百度百科优化排名

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

怎么样在服务器上建设网站济南建设网济南市建培中心

摘要:近几年,Android系统占据着智能移动设备操作系统领域中极大的市场份额。随着Android市场中软件数量的不断攀升,移动用户对Android应用的质量要求也越来越高。如何保证Android软件的质量,成为移动应用领域中亟待解决的问题。重视移动应用的测试工作,是提高Androi…

楚雄建设局网站成都平面设计公司

从叶到花,或从花到叶,于科研是一个过程,而于生命自身则永远只在此刻。花和叶都是一种记忆方式,果子同时也是种子。生命是闪耀的此刻,不是过程,就像芳香不需要道路一样。 ——顾城《一个人应该活得是他自己并且干净》 二叉搜索树:右子树节点值都比node大,…

专业的外贸网站建设安徽合肥网站制作

1⃣️环境准备 准备 Java 环境:终端输入 java -version 命令来确认版本是否符合 Elasticsearch 要求下载并解压 Elasticsearch:前往(https://www.elastic.co/downloads/elasticsearch)选择适合你的 Mac 系统的 Elasticsearch 版本…

完整教程:JVM——云原生时代JVM的演进之路

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

价值原语博弈:AI元人文的伦理架构探索

价值原语博弈:AI元人文的伦理架构探索 在人工智能伦理研究的当前阶段,我们面临着将抽象道德原则转化为可实践框架的挑战。本文提出“价值原语博弈”作为实现AI元人文理念的一种工程化路径,通过构建动态的价值计算模…

文件的物理结构I

对非空闲磁盘块的管理(存放了文件数据的磁盘块) 对空闲磁盘块的管理 文件快。磁盘块 内存管理中,进程的逻辑地址分为一个个页面,同样在外存中,为了方便管理,文件的逻辑地址分为了一个个的块 于是文件的逻辑地址也…

实用指南:【C++高并发内存池篇】性能卷王养成记:C++ 定长内存池,让内存分配快到飞起!

实用指南:【C++高并发内存池篇】性能卷王养成记:C++ 定长内存池,让内存分配快到飞起!pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

商丘家具网站建设个人网页制作模板html

2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果) 网页源码见附件,比较简单,之前用很多种方法实现过该效果,这次的效果相对更好。 实现功能: (1)实现左侧边栏的手…

设备管理系统网站模板企业怎么做网站建设

一,单层板: 1,铜皮 和导线类似,提供电路板上的电信号传导路径。 因为铜具有良好的导热性能,因此铜皮还可以用于散热。在高功率电子设备中,通过在PCB上增加铜皮面积和散热片,可以提高散热效果…

VR/AR 显示瓶颈将破!铁电液晶技巧迎来关键突破

VR/AR 显示瓶颈将破!铁电液晶技巧迎来关键突破pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…