0

0

JavaScript如何实现数组去重_有哪些常用方法解决重复元素问题

幻影之瞳

幻影之瞳

发布时间:2026-01-02 22:12:08

|

817人浏览过

|

来源于php中文网

原创

javascript数组去重有set、filter+indexof、reduce及对象按key去重四种方法:set最简洁高效但仅适用于原始类型;filter+indexof兼容旧浏览器但性能为o(n²);reduce灵活可扩展;对象去重需指定唯一key字段。

javascript如何实现数组去重_有哪些常用方法解决重复元素问题

JavaScript 数组去重有多种实用方法,核心思路是利用数据结构的唯一性(如 Set)或遍历比对逻辑来筛掉重复项。选择哪种方式,取决于是否需要保持原顺序、是否处理复杂类型(如对象)、以及对性能和兼容性的要求。

使用 Set 快速去重(最简洁,适合基本类型)

Set 对象只允许存储唯一值,配合扩展运算符可一行实现去重,且自动保留首次出现的顺序。

  • 适用于字符串、数字等原始类型数组
  • 不支持对象、函数等引用类型(因为对象在 Set 中被视为不同元素)
  • 代码简洁,性能好,现代浏览器和 Node.js 环境普遍支持

示例:

const arr = [1, 2, 2, 3, 4, 4, 5];<br>
const unique = [...new Set(arr)]; // [1, 2, 3, 4, 5]

filter + indexOf(兼容老环境,保持顺序)

利用 indexOf 返回元素第一次出现的索引,只保留当前索引等于首次索引的元素。

  • 兼容 IE9+,无需额外依赖
  • 同样适用于原始类型,逻辑清晰易理解
  • 时间复杂度为 O(n²),大数据量时略慢于 Set

示例:

const arr = ['a', 'b', 'a', 'c'];<br>
const unique = arr.filter((item, index) => arr.indexOf(item) === index); // ['a', 'b', 'c']

reduce 实现去重(灵活可控,可扩展)

通过 reduce 累积一个新数组,在每次迭代中判断是否已存在,决定是否添加。

DoMore.ai
DoMore.ai

DoMore.ai 是一个个性化的 AI 工具目录

下载

立即学习Java免费学习笔记(深入)”;

  • 便于加入自定义逻辑(比如忽略大小写、按某属性去重对象)
  • 语义明确,适合需要中间处理的场景
  • 性能与 filter + indexOf 接近,也是 O(n²)

示例(基础去重):

const arr = [2, 1, 2, 3];<br>
const unique = arr.reduce((acc, item) => {<br>
  if (!acc.includes(item)) acc.push(item);<br>
  return acc;<br>
}, []); // [2, 1, 3]

处理对象数组的去重(按指定 key)

原始方法无法直接比较对象,需借助 key 值(如 id、name)做唯一标识。

  • 常用组合:reduce + 对象/Map 记录已见 key
  • 也可用 filter 配合 findIndex 判断是否重复
  • 注意避免直接用 JSON.stringify 比较,它不稳定(键序、空格、undefined 处理等问题)

示例(按 id 去重):

const users = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Alice'}];<br>
const uniqueUsers = users.reduce((acc, cur) => {<br>
  const exists = acc.find(item => item.id === cur.id);<br>
  if (!exists) acc.push(cur);<br>
  return acc;<br>
}, []); // 保留第一个 id=1 的对象

不复杂但容易忽略细节:原始类型用 Set 最省心;要兼容旧浏览器选 filter + indexOf;处理对象一定得明确依据哪个字段判重。根据实际场景挑一种就够了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

452

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

328

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

128

2025.10.17

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

839

2023.08.22

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

0

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.7万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号