当前位置: 首页 > news >正文

JavaScript学习笔记(十四):ES6 Set函数详解

Set函数的基本概念

Set是ES6引入的一种新的数据结构,类似于数组,但成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。

通过new Set()可以创建一个新的Set实例:

const set = new Set();

常用方法与属性

add(value) 向Set实例添加一个值,返回Set结构本身,因此可以链式调用:

set.add(1).add(2).add(3);

delete(value) 删除Set实例中的某个值,返回一个布尔值表示是否删除成功:

set.delete(1); // true

has(value) 判断Set实例中是否包含某个值,返回布尔值:

set.has(2); // true

clear() 清除Set实例中的所有成员,没有返回值:

set.clear();

size属性 返回Set实例的成员总数:

set.size; // 0


遍历操作

Set实例有四个遍历方法,可以用于遍历成员:

keys() 返回键名的遍历器:

for (let item of set.keys()) {console.log(item);
}

values() 返回键值的遍历器:

for (let item of set.values()) {console.log(item);
}

entries() 返回键值对的遍历器:

for (let item of set.entries()) {console.log(item);
}

forEach() 使用回调函数遍历每个成员:

set.forEach((value, key) => {console.log(key, value);
});


应用场景

1. 数组去重

利用Set的唯一性可以快速实现数组去重:

const arr = [1, 2, 2, 3, 4, 4];
const uniqueArr = [...new Set(arr)]; // [1, 2, 3, 4]

2. 字符串去重:

const str = 'abacad';
const uniqueStr = [...new Set(str)].join('');

3. DOM元素集合去重:

const elements = [...document.querySelectorAll('div')];
const uniqueElements = new Set(elements);

4. 存储唯一值 

在需要存储不重复的数据时,Set 比数组更高效,例如存储用户 ID、标签等。

const userIds = new Set();
userIds.add(1001).add(1002).add(1001);
console.log(userIds.size); // 2

5. 集合运算

可以模拟数学中的集合运算,如并集、交集、差集等:

const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);// 并集
const union = new Set([...a, ...b]); // Set {1, 2, 3, 4}// 交集
const intersect = new Set([...a].filter(x => b.has(x))); // Set {2, 3}// 差集
const difference = new Set([...a].filter(x => !b.has(x))); // Set {1}


注意事项

NaN 的处理
Set 认为 NaN 等于 NaN,尽管在 JavaScript 中 NaN !== NaN

const set = new Set();
set.add(NaN);
set.add(NaN);
console.log(set.size); // 1

对象引用
Set 中的对象是引用类型,即使内容相同,也会被视为不同的值。

const set = new Set();
set.add({});
set.add({});
console.log(set.size); // 2

遍历顺序
Set 的遍历顺序就是插入顺序,可以用 forEach 或 for...of 遍历。

const set = new Set([1, 2, 3]);
set.forEach(value => console.log(value));
for (const value of set) {console.log(value);
}

优化建议

替代数组查找: 当需要频繁检查某个值是否存在时,使用Set的has方法比数组的indexOf或includes更高效。

大数据量去重: 对于大规模数据去重操作,Set的性能明显优于传统数组遍历方法。

内存优化: 在只需要存储唯一值的场景下,使用Set比数组更节省内存空间。

遍历优化: Set提供了keys()、values()和entries()方法用于遍历,比数组遍历在某些场景下更高效。


总结

ES6的Set数据结构为解决数据唯一性问题提供了原生支持,其特点是值唯一、操作高效。在去重、集合运算等场景下表现优异,相比传统数组方法有显著性能优势。

Set与Map类似,但更关注值本身的唯一性而非键值对关系。在实际开发中,合理使用Set可以简化代码逻辑,提高运行效率,特别是在处理大数据量和频繁查找的场景下。

http://www.dtcms.com/a/410215.html

相关文章:

  • 应用网站如何做wordpress 不同数据库
  • Nginx 访问控制、用户认证与 HTTPS 配置指南
  • 老板让做公司网站设计社交网站开发公司
  • 电影级深黄色调人像风光摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 【C++】:模板进阶
  • 【java 语法】Java枚举(Enum)全面详解
  • 栈的顺序存储基本概述
  • 休闲食品网站建设中土集团北方建设有限公司网站
  • 车载以太网100/1000BASE-T1物理层的基础概念和应用注意事项
  • Bandzip去除公告
  • 上颌磨牙根方解剖特点与拔牙器械应用策略
  • 三数之和_优选算法(C++)双指针
  • 鸿蒙开发 一 (九)、嵌套滚动,Scroll + List
  • 【展厅多媒体】互动虚拟翻书技术应用全解析
  • 外贸网站建设定制开发小型办公室中式装修
  • WaveTerminal+cpolar:命令行工具的远程协作新体验
  • 基于C++的分布式RPC框架(一)
  • 【有源码】基于Hadoop+Spark的AI就业影响数据分析与可视化系统-AI驱动下的就业市场变迁数据分析与可视化研究-基于大数据的AI就业趋势分析可视化平台
  • 爆炸特效:Unity+Blender-02-火焰
  • 设计模式-结构性设计模式(针对类与对象的组织结构)
  • STM32--大功率mos管驱动模块
  • 中国铁路监理建设协会网站济南网站建设公司
  • 解析UART空闲中断与DMA接收机制
  • 重庆网站建设百度推广wordpress 随机一句话
  • 企业数据采集实战(二):设备多样性与异构性问题的挑战
  • Android Handler源码阅读
  • JavaWeb项目部署02(Docker)
  • VMware+RockyLinux+ikuai+docker+cri-docker+k8s+calico BGP网络 自用 实践笔记(底稿)
  • 意力机制 | 添加Deformable-LKA可变形大核注意力
  • Android Automotive OS架构