javascript Set是什么_与数组有何不同

发布时间 - 2026-01-03 00:00:00    点击率:
JavaScript的Set是存储唯一值的内置集合,用于去重、存在性判断和集合运算;与数组相比,它拒绝重复、无索引、不保证遍历顺序,提供add/has/delete等高效集合操作。

JavaScript 的 Set 是一种内置集合数据结构,专门用来存储**唯一值**——无论原始值还是对象引用,重复添加的值会被自动忽略。它不是数组的替代品,而是解决特定问题的工具:去重、快速存在性判断、集合运算。

核心区别:唯一性 vs 重复性

数组允许完全相同的元素多次出现,而 Set 天然拒绝重复:

  • 数组[1, 1, 2, 2, 3] 是合法且保留全部 5 个元素的;
  • Setnew Set([1, 1, 2, 2, 3]) 实际只存 {1, 2, 3}.size 为 3。

结构特性:无序性 vs 有序性

数组按插入顺序严格排列,每个元素有确定索引(arr[0]arr[1]);Set 没有索引,不保证遍历顺序(尽管现代引擎大多保持插入顺序,但规范不保证,不可依赖):

  • 不能用 set[0] 访问元素;
  • 要取值,得转成数组(Array.from(set)[...set])或用 for...of 迭代。

常用操作方式不同

数组靠索引和方法链操作(pushfiltermap);Set 提供语义更清晰的集合操作 API:

  • add(value) —— 添加,自动去重,返回自身(可链式);
  • has(value) —— 判断是否存在,时间复杂度 O(1),比数组 includes()indexOf() 快得多;
  • delete(value) —— 按值删除(无需找索引),返回布尔值;
  • clear()size 属性 —— 清空和计数,比数组 length = 0 或手动计数更直观。

典型使用场景对比

选数组,当你需要:

  • 按位置访问或修改元素(如 arr[2] = 'x');
  • 保留重复项(如日志列表、用户点击流);
  • 大量使用 mapreducesort 等高阶函数。

选 Set,当你需要:

  • 快速去重([...new Set(arr)] 是最简去重写法);
  • 高频检查某值是否已存在(如防重复提交、缓存键管理);
  • 做集合运算(并集、交集、差集),配合扩展运算符和 filter 很容易实现。


# javascript  # java  # 工具  # 区别  # 排列  # red 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  jQuery validate插件功能与用法详解  java ZXing生成二维码及条码实例分享  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel怎么为数据库表字段添加索引以优化查询  Python进程池调度策略_任务分发说明【指导】  如何快速启动建站代理加盟业务?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel如何处理CORS跨域请求?(配置示例)  如何在七牛云存储上搭建网站并设置自定义域名?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  jQuery中的100个技巧汇总  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  如何在新浪SAE免费搭建个人博客?  Android利用动画实现背景逐渐变暗  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Swift中swift中的switch 语句  使用Dockerfile构建java web环境  如何在搬瓦工VPS快速搭建网站?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何用AWS免费套餐快速搭建高效网站?  Python制作简易注册登录系统  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  微信小程序 scroll-view组件实现列表页实例代码  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  ,网页ppt怎么弄成自己的ppt?  如何在局域网内绑定自建网站域名?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  iOS发送验证码倒计时应用  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  如何在建站之星绑定自定义域名?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  如何确认建站备案号应放置的具体位置?  iOS验证手机号的正则表达式  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何实现API速率限制?(Rate Limiting教程)  网站制作壁纸教程视频,电脑壁纸网站?  什么是javascript作用域_全局和局部作用域有什么区别?  如何在IIS中配置站点IP、端口及主机头?