2025 AI基础设施风向标,不看必后悔!#AI基础设施峰会 了解详情
写点什么

所有主流浏览器都支持新的 JavaScript 集合方法

作者:Agazi Mekonnen

  • 2024-08-29
    北京
  • 本文字数:1809 字

    阅读完需:约 6 分钟

大小:454.40K时长:02:35
所有主流浏览器都支持新的JavaScript集合方法

随着 Firefox 127 的发布,现在所有主流浏览器引擎都全面支持新的JavaScript集合方法,包括 intersection()、union()、difference()、symmetricDifference()、isSubsetOf()、isSupersetOf()和 isDisjointFrom()。这意味着开发者们不再需要依赖 polyfill 来确保这些方法在不同环境中的兼容性。这些新加入的特性提供了一套便捷的内置工具来操作和比较集合,不仅简化了开发,还提升了程序的性能。


JavaScript 中的 Set 与 Array 类似,但它可以确保集合中的每个元素都是唯一的。这种自动除重的特性使得 Set 成为创建唯一元素集合的理想选择。下面是一个简单的例子,展示了如何创建一个 Set 并向其添加元素:


const users = new Set();
const alice = { id: 1, name: "Alice" };
users.add(alice);
users.forEach(user => { console.log(user) });
复制代码


在检查元素是否存在时, Set 通常比 Array 更加高效,这一特性使得它对于性能要求较高的应用程序来说非常有价值。


union()方法返回一个新 Set,包含原始 Set 和给定 Set 中的元素。这个方法在合并集合时极为有用,同时确保结果集中不包含重复项:


const set1 = new Set(["Alice", "Bob", "Charlie"]);
const set2 = new Set(["Bob", "Charlie", "David"]);
const unionSet = set1.union(set2);
unionSet.forEach(name => {
  console.log(name); // 输出: Alice, Bob, Charlie, David
});
复制代码


intersection()方法返回一个新 Set,只包含两个 Set 共有的元素。这个方法在识别两个集合共同元素时非常有用:


const intersectionSet = set1.intersection(set2);
intersectionSet.forEach(name => {
  console.log(name); // 输出: Bob, Charlie
});
复制代码


symmetricDifference()方法返回一个新 Set,包含只在其中一个 Set 中出现的元素,不包含两个 Set 共有的元素。这个方法在识别两个集合各自的不同元素时非常有用:


const symmetricDifferenceSet = set1.symmetricDifference(set2);
symmetricDifferenceSet.forEach(name => {
  console.log(name); // 输出: Alice, David
});
复制代码


difference()方法返回一个新 Set,包含了原始 Set 中有而给定 Set 中没有的元素。这在需要从集合中排除某些元素时非常有用:


const set1Only = set1.difference(set2);
set1Only.forEach(name => {
  console.log(name); // 输出: Alice
});
复制代码


isSubsetOf()和 isSupersetOf()方法根据两个 Set 之间的包含关系返回一个布尔值。isSubsetOf()方法检查一个 Set 的所有元素是否都包含在另一个 Set 中,而 isSupersetOf()方法检查一个 Set 是否包含了另一个 Set 的所有元素。

const subset = new Set(["Alice", "Bob"]);
const superset = new Set(["Alice", "Bob", "Charlie"]);
if (subset.isSubsetOf(superset)) {
  console.log("subset is a subset of superset"); // 这将被打印出来,因为subset的所有元素也都在superset中。
} else {
  console.log("subset is not a subset of superset");
}
if (superset.isSupersetOf(subset)) {
  console.log("superset is a superset of subset"); // 这将被打印出来,因为subset中的所有元素也都在superset中。
} else {
  console.log("superset is not a superset of subset");
}
复制代码


isDisjointFrom()方法检查两个 Set 是否有共同元素:

const set3 = new Set(["Eve", "Frank", "Gina"]);
if (set1.isDisjointFrom(set2)) { console.log("Set1 and Set2 are disjoint"); // 这将被打印出来,因为集合set1和集合set2没有共同元素} else { console.log("Set1 and Set2 are not disjoint");}
if (set1.isDisjointFrom(set3)) { console.log("Set1 and Set3 are disjoint");} else { console.log("Set1 and Set3 are not disjoint"); // 这将被打印出来,因为集合set1和集合set3有一个共同的元素“Charlie”
复制代码

社区对这些新方法反响热烈。在Reddit的一个讨论帖中,用户 peterlinddk 表示:


“太好了,我们终于可以用 Set 做更多的事情,不仅仅是‘重复项检测器’。我还希望有一种方法,允许对象在不必是完全相同的实例的情况下也能被认为是‘相等’的,有点像 Java 的.equals 和.hashCode 方法。”


另一位用户 Pelopida92 对这些新方法在性能上带来的提升表示赞赏,并表示:


“Set 太棒了。我在一些处理大数据量的脚本中广泛使用了这些 Set 方法,因为它们不仅在性能上优于数组,使用起来也非常简便和直观。”


原文链接

https://www.infoq.com/news/2024/07/javascript-set-methods/

2024-08-29 08:008792

评论 1 条评论

发布
用户头像
Chrome 是支持 ECMAScript 6 (ES6) 及更高版本的 JavaScript 标准的主要浏览器之一。这意味着开发者可以使用最新的 JavaScript 功能,如箭头函数、模块化、Promise、async/await 等,来编写更简洁、更现代的代码。
2024-09-02 15:22 · 福建
回复
没有更多了
发现更多内容

社交软件红包技术解密(四):微信红包系统是如何应对高并发的

JackJiang

网络编程 即时通讯 IM

如何快速批量导出CAD测量结果?

在路上

cad cad看图 CAD看图王

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS HPE (慧与) 定制版

sysin

esxi hpe

软件项目建设方案模板参考,项目建设文档

金陵老街

深度解析1688 API对电商的影响与实战应用

科普小能手

数据挖掘 电商 1688 运营干货 API 接口

万字长文:京东保险供应链的前世今生

京东科技开发者

ClkLog埋点分析系统常见问题-指标定义与统计逻辑Sec.1

ClkLog

开源 数据分析 埋点 sdk 用户画像

AI Agent:软件测试自动化的新纪元

测试人

软件测试

英伟达首席工程师Corey: HNSW+CPU过时了!GPU+RAPIDS cuVS才是向量检索最优解

Zilliz

gpu cpu 英伟达 向量检索 Milvus

想要冲击腾讯的朋友不要错过

王中阳Go

腾讯 面经

淘宝商品数据抓取与关键词搜索API应用:深度解析与专业指南

代码忍者

淘宝API接口

京东app商品详情API接口系列(京东API)

tbapi

京东API接口 京东app详情接口

医学影像软件的开发的技术难点

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

从网络到支撑系统,GenAI将给运营商带来哪些变化?

鲸品堂

通信运营商 GenAI 企业号 2025年1月PK榜

马斯克、黄仁勋共同“打响”2025年全球人形机器人商业化第一

机器人头条

英伟达 科技 特斯拉 人形机器人 具身智能

“数据中心场景鲲鹏BoostKit大数据使能解决方案”入选“2024 ICT产业高质量发展推荐”

极客天地

医学影像软件的开发流程

北京木奇移动技术有限公司

医学影像 软件外包公司 webgl开发

“考公”有捷径?Milvus助力粉笔教育构建个性化考公RAG

Zilliz

Milvus rag 粉笔教育 图搜召回

具身智能加快产业重构,九牧引领行业从“单品”到“生态”

Alter

“企业级敏捷教练课程” 2月15-16日 · CSP-SM认证周末班

ShineScrum

Scrum 敏捷 认证 Scrum Master

Jenkins与不同阶段测试的完美结合

测试人

软件测试

EasyExcel碰到问题记录

京东科技开发者

Spring缓存注解浅析及实践

京东科技开发者

AI正在如何重塑未来职业发展路径?

天津汇柏科技有限公司

AI 人工智能

Milvus入门小册

Quincy

Milvus 入门版

巧用CAD多行文字与文字样式功能,提高绘图效率!

在路上

cad cad看图 CAD看图软件 CAD看图王

深度揭秘:JenkinsFile与Pipeline的完美结合

测试人

软件测试

对话4位技术大咖,探秘华为开发者空间打破壁垒,实现跨平台协作

华为云开发者联盟

去哪儿国际酒店AI生成视频实践

Qunar技术沙龙

人工智能 AI视频

Alibaba Cloud Linux V3 新版发布,以安全为基石,为阿里云ECS九代实例注入 AI 新动力

OpenAnolis小助手

国产操作系统 Alibaba Cloud Linux

所有主流浏览器都支持新的JavaScript集合方法_大前端_InfoQ精选文章