JavaScript小技巧:数组去重的几种优雅写法

简介: JavaScript小技巧:数组去重的几种优雅写法

JavaScript小技巧:数组去重的几种优雅写法

在日常开发中,数组去重是经常遇到的需求。除了传统的for循环加indexOf,ES6提供了更简洁的解法。

1. 最简洁:Set + 扩展运算符

const unique = arr => [...new Set(arr)];
// 示例:[1,2,2,3] => [1,2,3]

一行代码搞定,性能优异,适合多数场景。

2. 兼容对象:filter + findIndex

当数组包含对象时,Set无法直接去重(对象引用不同):

const uniqueObj = arr => 
  arr.filter((item, index, self) => 
    self.findIndex(t => t.id === item.id) === index
  );

id属性去重,灵活可控。

3. 性能优化:reduce + Map

对于大型数组,Map的查找效率更高:

const uniqueByMap = arr => 
  [...arr.reduce((map, item) => 
    map.set(item.id, item), new Map()).values()];

4. 实用技巧:过滤假值

const clean = arr => arr.filter(Boolean);
// [0, 1, false, 2, '', 3] => [1,2,3]

filter(Boolean)会移除所有假值(0, false, null, undefined, '')。

总结

  • 简单类型用Set
  • 对象数组根据业务选择合适的比较字段
  • 追求性能考虑Map

掌握这些技巧,代码质量立竿见影。

目录
相关文章
|
5月前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c9i实例cpu型号、性能参数、收费标准与活动价格
阿里云服务器计算型c9i实例搭载全新CIPU架构与英特尔®至强®6处理器,算力稳定且安全加固,单核算力提升20%,支持AMX矩阵加速与TDX安全技术,适用于企业级应用、视频编解码等多场景。实例采用1:2处理器与内存配比,支持高性能NVMe协议与ESSD云盘,网络带宽强大,支持IPv4/IPv6及ERI技术。提供按量付费、包年包月等多种计费模式,当前活动价格低至6.4折,结合优惠券可进一步降低成本,适合承载高性能计算与关键业务。
|
5月前
|
存储 弹性计算 关系型数据库
阿里云服务器4核16G可选实例规格、收费标准、适用场景及活动价格
阿里云4核16G云服务器提供多样化实例规格,满足不同场景需求。收费模式灵活,支持按量付费和包年包月,其中包年包月性价比最高。目前4核16G配置选择经济型e实例的活动价格为2174.57元起,通用算力型u2i实例1576.80元起,通用型g9i实例3944.23元起。
|
5月前
|
缓存 编译器 程序员
C语言深度解析:restrict关键字——编译器性能优化的终极钥匙
C99的`restrict`关键字是C语言性能优化的“终极钥匙”:它向编译器承诺指针独占访问内存,彻底解决同类型指针别名问题,解锁循环向量化、寄存器缓存等激进优化。滥用致未定义行为,善用则性能飙升数倍——这才是真正高阶C程序员的必修课。(239字)
|
5月前
|
人工智能 API 网络安全
保姆级图文教程!阿里云轻量服务器部署OpenClaw+Docker极简方案+Skills集成及避坑指南
2026年,OpenClaw(曾用名Clawdbot)已成为开源AI自动化代理领域的标杆产品,凭借轻量化运行、自然语言驱动、插件化扩展三大核心优势,广泛应用于文件管理、信息检索、定时任务、网页自动化、内容处理等日常效率场景。对于零基础用户而言,阿里云轻量应用服务器是部署OpenClaw的最优载体——操作简单、性价比高、环境稳定且自带官方优化镜像,全程无需复杂运维知识,小白也能快速完成从服务器创建到AI助手上线的全流程。
1259 3
|
5月前
|
人工智能 自然语言处理 机器人
OpenClaw保姆级图文教程!零代码全平台部署(阿里云+Win11/Mac/Linux)+百炼API配置+避坑指南
在AI工具同质化严重的2026年,OpenClaw(前身为Clawdbot/Moltbot)凭借“私有化部署+自然语言驱动自动化”的核心优势脱颖而出。它不仅是能聊天的AI助手,更是可运行在自有服务器或本地设备的“数字员工”——能通过自然语言调用浏览器、文件系统、邮件等工具,完成文档整理、邮件处理、日程安排等实际任务,还支持对接钉钉、飞书等办公软件,实现全场景协作。
1794 3
|
5月前
|
人工智能 JavaScript Linux
打造有长期记忆的AI助手!OpenClaw 零基础部署(阿里云/本地)+Obsidian联动实战及避坑指南
在AI代理工具泛滥的2026年,多数产品仍停留在“一次性聊天”层面——关闭页面即丢失记忆,无法沉淀个人知识库,更难以适配本地化数据管理需求。而OpenClaw(曾用名Clawdbot)+Obsidian+Obsidian CLI的组合,凭借“开源免费、本地可控、长期记忆”三大优势,成为搭建私人AI知识库的最优解:OpenClaw提供本地AI代理能力,Obsidian承载结构化知识存储,CLI实现工具间无缝联动,三者协同让AI从“临时聊天工具”升级为“能沉淀、可复用的私人知识助手”。
2536 131
|
5月前
|
存储 人工智能 自然语言处理
MIT论文解读:LLM 会被自身历史回复拖累 ,上下文污染会导致多轮对话质量衰减
MIT 2026年重磅论文揭示:AI多轮对话中,保留自身历史回复反而导致“上下文污染”,引发幻觉累积与质量滑坡。实验证明,移除AI过往回复可缩减上下文达10倍,70%轮次质量不变。这挑战了行业默认设计,呼吁从“堆叠历史”转向“智能省略”。
941 2
MIT论文解读:LLM 会被自身历史回复拖累 ,上下文污染会导致多轮对话质量衰减
|
5月前
|
分布式计算 Kubernetes Spark
Spark / Flink 跑在 Kubernetes 上真的更香吗?聊聊那些没人提前告诉你的性能坑
Spark / Flink 跑在 Kubernetes 上真的更香吗?聊聊那些没人提前告诉你的性能坑
531 7
|
5月前
|
存储 监控 安全
Java ZGC:亚毫秒级停顿的低延迟GC 革命性底层设计
ZGC是Java里程碑式低延迟GC:通过有色指针与读屏障,实现亚毫秒级STW停顿(<1ms),且停顿时间不随堆大小(8MB–16TB)或存活对象增长。JDK21起为默认GC,兼顾高吞吐(损耗≤15%),彻底解决传统GC停顿劣化难题。
770 6
|
5月前
|
机器学习/深度学习 PyTorch TensorFlow
从 0 到 1 写一个神经网络训练循环:别再只会 `model.fit()` 了
从 0 到 1 写一个神经网络训练循环:别再只会 `model.fit()` 了
487 7