数组去重的简单方法(不含引用类型)

简介: 数组去重的简单方法(不含引用类型)

我们先分析简单的场景,数组内只有基本类型,不含引用类型


首先举个栗子:

image.png

打印结果如下:

image.png

对于第一次接触这个场景的新手来说,其实这段代码很吓人。不要害怕,接下来我带你一步一步理解这段代码的含义。

我们要学会把复杂逻辑,分多步,简单化去实现一个功能。就好比这个数组,我们假设它只有三个number类型的内容。

image.png

1.首先定义一个函数,这个函数接受一个数组作为参数

image.png

2.先用for循环遍历拿到我们数组中的每一项元素,很简单的

image.png

这时候,一定要把这个问题简单话,不要去管后面的循环,你就只需要把i当成0就可以,那么你现在拿到了这个数组的第一个元素1,我们去重,那么肯定就需要拿到第二个元素对吧?那第二个元素我怎么拿呢?你第一层怎么拿,那就怎么拿呗。再来一个for不就行了吗?

image.png

ok,你现在有12了,接下来做比较不就行了吗?如果相同,我们把后面出现的元素,也就是j索引对应元素删除即可。

image.png

我认为复习一下splice这个方法是很有必要的


splice这个方法的使用知识.

  1. 这个函数是改变原数组的
  2. 这个函数可以接收三个参数,第一个参数为你要删除元素在数组中的索引值,第二个参数是从这个索引向后删除多少个元素,第三个参数就是在你这个索引后面增加多少个元素,这个参数是一个以逗号分隔的数据,一般很少有人知道第三个参数,但是如果你在和别人说的时候,你知道第三个参数,那么别人肯定会对你的基本功做出一个肯定的答案。 3 .特别重要的一点,这个函数返回值是你截取的那一部分,并不是返回原数组。(这里很多人会有一个大误区,就是我想着删除第一个元素[1,2,1],返回的应该是剩下的[2,1],但是实际上返回值是[1],我们真正想要的结果还需要去操作原属组。)

废话不多说,咱们先抛开原题,简单试验一下splice这个方法

image.png

思考一:如果只有一个参数的话,那么B会是什么呢?

image.png

答案是:第二个参数它会默认设置为数组的长度arr.length

思考二:下面会是怎样的输出呢?

image.png

这个代码我就不放答案了,强烈建议自己去敲一敲,按F12在控制台打一下真的花不了你一分钟的。

回到正题

ok,我们再来捋一下下面的代码。

image.png

乍一看好像没什么问题,运行一下试试;

image.png

什么情况?我们不是去重复值吗?怎么还有重复的呢?我们来一步一步分析一下到底怎么回事:

  1. i拿着数字1去和下面对比,对比到j=4,发现1===1,运行splice(4,1)把数组末尾的1删除,这时候原数组的值为arr=[1,2,2,2]
  2. 接下来进入第二轮循环i拿着索引为1的数字2去对比拿着j拿着的索引为2的数字2,发现2===2这时候运行splice(2,1)!!!!!注意:全篇重点来了!!!!!splice方法运行后,arr的长度发生变化,原本数组是arr=[1,2,2,2],现在数组中索引为2的元素数字2被删除了,而后面原来索引值为3的数字2的索引值瞬间变为了2,!!!这个索引值的变化是瞬间的,注意,此时,我们的j还是22比过了吗?是的,比过了,所以i拿着2直接去找索引为3的数字了

这种方法我们想到了,我应该在判断的时候,如果进到了下面的if语句里

image.png

那么就说明找到了重复的值,那么我们就让j--,重新再让i拿着的数字和当前的索引判断一下是否相等。

image.png

总结:


我们要通过这个例子,来捋清查重的思路,我不仅仅希望通过这篇文章你只学会了删除1,2,3,更重要的是你通过这个例子来打通之前未考虑这个问题的思路。举一反三,希望你可以动手敲一敲。

相关文章
|
6月前
|
JSON 算法 前端开发
数组原型对象的最后一个元素
数组原型对象的最后一个元素
55 0
|
3月前
|
JavaScript 前端开发 索引
JS遍历数组里数组下的对象,根据数组中对象的某些值,组合成新的数组对象
这篇文章介绍了如何在JavaScript中遍历数组里数组下的对象,并根据对象的某些属性值组合成一个新的数组对象。主要内容包括使用ES6的`for...of`循环来遍历数组对象,然后根据需要提取对象中的属性值,并将它们放入新的对象中,最终形成一个新的对象数组以供使用。
|
11天前
解构赋值时如果数组元素的值是对象,如何进行解构赋值?
【10月更文挑战第30天】当数组元素的值是对象时,解构赋值提供了一种方便灵活的方式来提取和使用对象的属性值,通过不同的组合和嵌套方式,可以满足各种复杂的数据结构处理需求,使代码更加简洁和易读。
|
11天前
|
网络架构 索引
用解构赋值来遍历数组
【10月更文挑战第30天】使用解构赋值来遍历数组为数组的遍历操作提供了一种更加灵活和简洁的方式,能够根据具体的需求灵活地获取和处理数组元素,提高代码的可读性和可维护性。
|
9天前
解构赋值时,如果数组元素的值是函数,如何进行解构赋值?
解构赋值对于数组中函数元素的处理提供了一种简洁明了的方式,能够方便地将函数提取到变量中进行后续的调用和操作,使代码更加清晰和易于理解。
18 4
|
11天前
解构赋值时如果数组元素的值是嵌套对象,如何进行解构赋值?
【10月更文挑战第30天】可以灵活地对数组中包含嵌套对象的元素进行解构赋值,根据具体的需求提取出所需的值,从而使代码更加简洁、清晰,提高代码的可读性和可维护性。
|
6月前
|
JavaScript 前端开发 索引
在JavaScript中,可以使用数组字面量或Array构造函数来创建一个数组对象
【4月更文挑战第16天】在JavaScript中,可以使用数组字面量或Array构造函数来创建一个数组对象
67 4
|
存储 机器学习/深度学习 Java
Java数组的定义和使用(一篇带你搞定数组)
Java数组的定义和使用(一篇带你搞定数组)
295 0
数组去重-数组对象去重
数组去重-数组对象去重
52 0
|
6月前
|
存储 Java 索引
【Java数组】数组定义 | 初始化赋值 | 数组练习题
【Java数组】数组定义 | 初始化赋值 | 数组练习题