[前端攻坚]:数组去重的几种方法

news2025/6/9 12:14:01

总结一些日常需要用到的一些api,也是在一些面试中会经常出现的题目,今天分享的是数组去重的几个不同的方法, 同时文章也被收录到我的《JS基础》专栏中,欢迎大家点击收藏加关注。

数组去重的方法

1.set去重
2.map去重
3.for循环+indexof
4.for循环+额外数组
5.双层for循环+splice
6.filter+indexof
7.map实现

Set去重

使用set自带的特性,利用set保存的元素都是不会重复,并且可以传入一个数组作为set的各个元素,set返回的是一个伪数组,可以通过reset的展开成多个元素,最后放到一个数组中,即可完成数组去重

var arr = [1,1,13,4,4,5,6,77,8,8,9]
console.log([...new Set(arr)]) 

indexOf实现数组去重

indexof可以判断数组时候存在某个元素,indexof判断不存在某个元素的时候会返回 number类型的 -1 ,具体做法如下:

1.声明一个新数组
2.遍历旧数组,如果该元素不存在新数组中,则push进新数组
3.返回新数组

function uniqueArr(arr){let res= []for(let i = 0 ;i<arr.length;i++){if(res.indexOf(arr[i]) === -1){res.push(arr[i])}}return res
}
console.log(uniqueArr(arr)) 

双层for循环+额外数组实现

判断条件是 j == result.length 判断每次循环的result数组是否全都遍历完,遍历完说明没有重复元素,使用push新增

let result = []; 
for (var i = 0; i < arr.length; i++) { for (var j = 0; j < result.length; j++) { if (arr[i] === result[j]) { break; } } if (j == result.length) { result.push(arr[i]); } 
} 
console.log(result) 

双层for循环+切割原数组实现

同样还是采用两个for循环,但与上面不同的是通过两个先后指针i、j来循环同一个数组,遇到相同的元素进行删除,然后j后退一位,因为删除一位的话,后面的元素会补上,所以j后退以为,以便循环的时候不会漏掉补位的元素

 function unique(arr){for(let i=0;i<arr.length;i++){for(let j=i+1;j<arr.length;j++){if(arr[i] === arr[j]){arr.splice(j,1)j--}}}return arr
} 

filter+indexof数组去重实现

indexOf()  方法返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回 -1

这里利用了indexof会返回第一个元素的索引,那么通过filter,在元素重复的情况下,我们只需要保留相同的第一个元素即可,也就是说第二次出现的元素,indexof返回的是第一个出现元素的下标,通过筛选这个条件,就能过滤掉第二次出现的元素

let unique= (arr) => {return arr.filter((item,index) => {return arr.indexOf(item) ===index;})
}; 

map实现

最后一个map的实现算是比较简单的,map同样会对重复的元素进行过滤,最后map.keys进行结构然后返回到一个数组中

function unique(arr) {let map = new Map()for(let item of arr){map.set(item,true)}return [...map.keys()]
} 

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python安装Pycrypto

前言 安装 使用以下命令安装 pip install pycrypto2.6.1报错 如果在安装过程中出现如下错误 则说明系统缺乏相应python开发包&#xff0c;需要进行安装对应的python开发包 解决 在CentOS下&#xff0c;如果是python2.7则使用如下命令安装 yum install python-devel是pyt…

Pytest用例运行及规范

温馨提示 本篇约1600字&#xff0c;看完需3-5分钟&#xff0c;学习学半小时&#xff0c;加油&#xff01; 先看普通函数运行顺序 import pytestdef test_one():print("我是清安")def test_02():print("--02--")def test_a():print("--a--")de…

BP神经网络的最简Python实现

文章目录神经元BP原理及实现测试BP&#xff0c;就是后向传播(back propagation)&#xff0c;说明BP网络要向后传递一个什么东西&#xff0c;这个东西就是误差。 而神经网络&#xff0c;就是由神经元组成的网络&#xff0c;所以在考虑BP之前&#xff0c;还不得不弄清楚神经元是…

endata 电影票房响应数据破解

本文仅供参考学习&#xff0c;如有侵权可联系本人 目标网站 aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9Cb3hPZmZpY2UvQk8vWWVhci9pbmRleC5odG1s加密入口分析 在异步请求那里可以看到请求接口&#xff0c;请求参数并未加密只是响应内容进行了加密&#xff0c;暂时也无法判断加密方…

JavaWeb的Servlet学习之Request03

目录 1.Request 1.1Request执行流程 1.2request对象和response对象的原理 1.3 request对象继承体系结构 1.4request功能&#xff1a; 1.3.1获取请求消息数据 1.获取请求行数据 2.获取请求头 3.获取请求体数据 4.其他功能 4.1获取请求参数通用方式&#xff1a;不论get…

开源CA搭建-基于openssl实现数字证书的生成与分发

目录 一、前言 二、openssl介绍 三、openssl的常用用法 &#xff08;一&#xff09;单向加密 &#xff08;二&#xff09;生成随机数 &#xff08;三&#xff09;生成公钥&#xff0c;私钥 1.生成私钥 2.提取公钥 四、搭建CA &#xff08;一&#xff09;创建根CA私钥…

Linux的camera驱动 摄像头调试方法

CameraInfo类用来描述相机信息&#xff0c;通过Camera类中getCameraInfo(int cameraId, CameraInfo cameraInfo)方法获得&#xff0c; 主要包括以下两个成员变量facing&#xff0c;facing 代表相机的方向&#xff0c; 它的值只能是CAMERA_FACING_BACK&#xff08;后置摄像头&am…

Golang 【basic_leaming】1 基本语法

阅读目录Go 语言变量Go 语言 - 声明变量1. 标准格式2. 批量格式Go 语言 - 初始化与定义变量1. 标准格式2. 编译器推导类型格式3. 短变量声明与初始化Go语言 - 多变量同时赋值Go 语言 - 匿名变量参考资料Go 语言整型&#xff08;整数类型&#xff09;1 自动匹配平台的 int 和 un…

新项目为什么决定用 JDK 17了

大家好&#xff0c;我是风筝。公众号「古时的风筝」&#xff0c;专注于后端技术&#xff0c;尤其是 Java 及周边生态。文章会收录在 JavaNewBee 中&#xff0c;更有 Java 后端知识图谱&#xff0c;从小白到大牛要走的路都在里面。 最近在调研 JDK 17&#xff0c;并且试着将之前…

阴差阳错,阴阳之变

北京的第一批“杨康”们已经返回到工作岗位&#xff0c;这其中就包括我。简单总结一下我的感染和康复过程&#xff0c;给大家做个样本吧。我属于北京放开的第一波感染者&#xff0c;12.9日当天感觉嗓子干&#xff0c;毫不犹豫&#xff0c;果然是中招了&#xff1b;周末开始发烧…

特朗普发行NFT惹群嘲,上线售罄现“真香定律”

文/章鱼哥出品/陀螺财经特朗普14日在其创建的社交平台truth social上发帖称&#xff0c;“美国需要一个超级英雄”。他还预告自己将于当地时间15日宣布“重大消息”。据《新闻周刊》报道&#xff0c;特朗普当日在其社交平台上发了一段十几秒的视频&#xff0c;里面有一个他站在…

Windows实时运动控制软核(三):LOCAL高速接口测试之C++

今天&#xff0c;正运动小助手给大家分享一下MotionRT7的安装和使用&#xff0c;以及使用C对MotionRT7开发的前期准备。 01 MotionRT7简介 MotionRT7是深圳市正运动技术推出的跨平台运动控制实时内核&#xff0c;也是国内首家完全自主自研&#xff0c;自主可控的Windows运动控…

Linux搭建测试环境详细步骤

本文讲解如何在Linux CentOS下部署Java Web项目的步骤 环境准备 &#xff08;1&#xff09;Linux系统&#xff08;2&#xff09;JDK&#xff08;3&#xff09;Tomcat &#xff08;4&#xff09;MySQL工具下载 一、Linux系统 本文主要是Linux CentOS7为例 自己在家练习小项…

[拆轮子] PaddleDetection 中的 COCODataSet 是怎么写的

今日&#xff0c;辗转反侧&#xff0c;该&#x1f4a9;的代码就是跑不成功&#xff0c;来看看 COCODataSet 到底是怎么写的&#xff0c;本文只参考当前版本的代码&#xff0c;当前版本 PaddleDetection2.5 COCODataSet 源码见附录 COCODataSet 类内部就三个函数&#xff1a; …

词义和词义消歧

Synsets(“synonym sets”, effectively senses) are the basic unit of organization in WordNet.同义词集 对于许多应用程序&#xff0c;我们希望消除歧义 • 我们可能只对一种含义感兴趣 • 在网络上搜索chemical plant 化工厂&#xff0c;我们不想搜到香蕉中的化学物质 所以…

【SpringBoot扩展点】 容器刷新前回调ApplicationContextInitializer

本文将作为Spring系列教程中源码版块的第一篇&#xff0c;整个源码系列将分为两部分进行介绍&#xff1b;单纯的源码解析&#xff0c;大概率是个吃力没人看的事情&#xff0c;因此我们将结合源码解析&#xff0c;一个是学习下别人的优秀设计&#xff0c;一个是站在源码的角度看…

【MySQL】索引和事务重点知识汇总

目录1.索引:1.1 索引的使用:1.2 索引背后的核心数据结构:1.2.1 先认识 B 树(N叉搜索树):1.2.2 再认识 B 树(N叉搜索树):2.事务:2.1 隔离性:2.1.1 脏读问题:2.1.2 不可重复读问题:2.1.3 幻读问题:2.1.4 总结:2.1.5 隔离级别:1.索引: 索引存在的意义就是为了提高查询到效率.索引…

【AI理论学习】Python机器学习中的特征选择

Python机器学习中的特征选择特征选择方法特征选择的Python库使用Scikit-learn实现特征选择方差卡方检验ANOVALasso正则化递归特征消除使用Feature-engine进行特征选择单变量特征选择相关性Python 中的更多特性选择方法参考资料任何数据科学项目的一个重要步骤是选择最具预测性的…

vue实现文件下载

引言 最近在自己做项目的需求的过程中&#xff0c;需要vuespringboot实现文件的下载功能&#xff08;导出博客文件&#xff09;。 问题重现 在我后端文件下载接口开发完成后&#xff0c;使用vue前端去进行对接时出现了问题。 我是直接使用的axios去进行请求接口&#xff0c…

Python 炫技操作:条件语句的七种写法

原代码 这是一段非常简单的通过年龄判断一个人是否成年的代码&#xff0c;由于代码行数过多&#xff0c;有些人就不太愿意这样写&#xff0c;因为这体现不出自己多年的 Python 功力。 if age > 18:return "已成年" else:return "未成年"下面我列举了六…