大家好,今天我们来讲一下,如何使用javascript判断一个数组之中,是否有相同重复的元素。
在讲之前,先来讲一下思路:
在现实当中,当我们要判断某几个东西是否相同,那就意味着这东西至少是有2个或更多,
否则单个东西是没法比较的。
数组也是一样,要判断一个数组中是否有重复的元素,
最简单,最直观的方法,
就是把数组复制一份,然后用复制的数组中的每一项,和原数组逐个比较一遍,
如何有任一个相同,就返回true,否则就返回false。
这种虽然从效率上差些,但胜在容易理解。
现在我们先看下代码:
虽然很简单,就是个for循环,if判断。。
但也可能会有同学表示晕啊,看不懂。
看不明白不要紧,我大概讲下,具体怎么比较的。。
首先我们看这个函数,它接收一个数组做为参数,
那传入之后,
在这个函数中的arr就是一个数组,对它使用join方法,
将这个数组转为一个字符串,并用逗号分隔。
然后呢,声明一个变量b,把这个新字符串赋值给它,等于把它存在变量b里了。
接下来,用一个for循环来对变量b进行循环处理,
就是循环b中的字符串中的每一个字符,
在循环中用if做一个判断,判断什么呢?
关键就在这里,前面已经说过了,函数一执行的时候,
就已经把传入的数组复制了一份给了变量b,
这时变量b和数组,它俩的内容是一样一样的,
都是1,3,4,5,2
接下来会看到,
程序对变量b,使用replace方法,将变量b中的arr[i]的内容,替换为"",
运行起来是这样的:
for循环从0开始,当i=0的时候,
arr数组的第0个值,上面代码中arr[0]的值是:1,
就是把1,替换为"",
而这个replace方法,是使用在变量b身上的,
那其实就是把变量b中保存着的字符串中的,1,替换为"",
之前变量b的内容是:1,3,4,5,2
替换之后是:"",3,4,5,2
然后用indexOf在变量b中查找arr数组的第[0]个值,arr[0]的值是1,
因为数组并没有被修改,它只用来被比较的。
实际运行时就是,'"",3,4,5,2'.indexOf(1),
而这时b中的字符串已经是,b = "",3,4,5,2; 了,
当然不会查找到1了,所以就会返回-1,就是没有查找到,
因为是for循环嘛,那么i++,
到i=1的时候,
就是把b这个字符串的arr[1]项,替换为"",
依然对字符串b进行 replace 操作,
这里字符串b就是:1,,4,5,2了,
而数组arr[1]的值是3,
就等于是 '1,"",4,5,2'.indexOf(3),当然返回还是-1,没找到,
以此类推一直到arr数组的最后一个
就这样整个数组的循环一遍,
其中任何一个 >-1,就是有重复,否则就是没有重复。
其实还是很简单的哈,大家多练习下,就明白啦。
今天这个例子,它的功能很有限的,
只能判断是否有重复,
只能返回true或是false,
下次我们讲一个稍稍复杂一点的