JS判断重复数组是否有重复项

大家好,今天我们来讲一下,如何使用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,

下次我们讲一个稍稍复杂一点的

本文分享自微信公众号 - web前端教室(webfeel)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

ExtJs学习笔记(16)_Form布局

这是最重要的一个布局,几乎所有的表单界面都可以采用form布局,详细的用法本文不作讨论(可以查阅官方API文档),这里只给出一个简单的示例 <script ty...

23650
来自专栏企鹅号快讯

给最后一周下个猛料,JavaScript 2017 使用调查!

"The State of JavaScript" 是由stateofjs发起,对Javascript生态现状进行的一个在线调查。至今一共进行了两次,分别是20...

22390
来自专栏菩提树下的杨过

悟透JavaScript读书笔记--闭包与原型

P44  <script type="text/javascript"> function Person(firstName,lastName,age){ ...

21180
来自专栏菩提树下的杨过

ExtJs学习笔记(15)_fit布局

fit布局很好理解,容器内的组件会自动充满整个容器 <script type="text/javascript"> Ext.onReady(funct...

21580
来自专栏菩提树下的杨过

ExtJs学习笔记(14)_Column布局

Column布局有点象传统html中的table的td,但是也有不同的地方: 先看下代码 <script type="text/javascript">   ...

23650
来自专栏菩提树下的杨过

利用Fck的javascript-API创建fck编辑器

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or...

22880
来自专栏编程

基于Node.js开发跨平台窗口程序

发表日期: 2017.12.26 分类: Code Tags: Node.js JavaScript 跨平台 Electron 时间很快,已经是学期末了,这学期...

55650
来自专栏菩提树下的杨过

ExtJs学习笔记(18)_ExtJs嵌入FCK示例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or...

21550
来自专栏菩提树下的杨过

ExtJs学习笔记(8)_TabPanel的用法

啥也不说了,直接上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt...

27350
来自专栏菩提树下的杨过

ExtJs学习笔记(17)_table布局

table布局顾名思义,就是象table表格一样的布局 <script type="text/javascript"> Ext.onReady(fun...

23270

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励