前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javascript 判断数组中的重复内容的两种方法(修复BUG) by FungLeo

javascript 判断数组中的重复内容的两种方法(修复BUG) by FungLeo

作者头像
FungLeo
发布2022-05-05 21:26:26
7650
发布2022-05-05 21:26:26
举报

javascript 判断数组中的重复内容的两种方法 by FungLeo

前言

2016年06月08日修复BUG

一般,我们可能会给数组去重,这个操作并不复杂,执行一个循环就是了.现在,我要做的是,判断数组中是否有重复的内容,如果有,返回 true 否则,返回 false.

思路

  1. 把数组变成字符串
  2. 循环原数组,拿每一个字段和这个字符串进行比对,看是否有重复

如何拿A字符串B字符串进行对比,并且要求判断出B字符串中包含过个A字符串呢?

方法一 indexOf() 和 lastIndexOf() 对比法.

首先,我们构建代码:

代码语言:javascript
复制
var arr = ["aa","bb","cc","bb","aa"];
arrRepeat(arr);

如上,我们要用一个arrRepeat(arr)的校验函数并执行,下面来构建这个函数

代码语言:javascript
复制
function arrRepeat(arr){
    var arrStr = JSON.stringify(arr);
    for (var i = 0; i < arr.length; i++) {
        if (arrStr.indexOf('"'+arr[i]+'"') != arrStr.lastIndexOf('"'+arr[i]+'"')){
            return true;
        }
    };
    return false;
}

OK,运行成功.

运行结果
运行结果

原理特别简单,就是,数组中的字段,在由数组变成的字符串中的首次出现位置和最后一次出现位置是否一致,如果不一致,就说明这个重复出现了.

方法二 match() 正则对比方法

首先,和上面一样,我们构建代码:

代码语言:javascript
复制
var arr = ["aa","bb","cc","bb","aa"];
arrRepeat(arr);

然后,我们重新构建arrRepeat(arr)函数

代码语言:javascript
复制
function arrRepeat(arr){
    var arrStr = JSON.stringify(arr);
    for (var i = 0; i < arr.length; i++) {
        if ((arrStr.match(new RegExp('"'+arr[i]+'"',"g")).length)>1){
            return true;
        }
    };
    return false;
}

原理是查找确定的重复次数,如果是大于1的话,就肯定是重复了.注意,这里是能够准确的查找出出现了几次的哦!所以,这个方法其实有更广泛的用途.

OK,运行又一次成功

运行结果二
运行结果二

总结

  1. 如果仅仅是比对第一个方法其实足够用了.
  2. 第二个方法可以查找出现的真实次数,比如重复了4次,就能找到4.具体的用途自己思考咯.
  3. 构建包含变量的正则的方法new RegExp(arr[i],"g")也是问别人才问出来的.
  4. 其实我先想到的是第二个思路,正则的问题困扰半天,终于解决了.才想到第一个思路的.

本文由FungLeo原创,允许转载.但转载必须署名作者,并保留文章首发链接.否则将追究法律责任. 首发地址:http://blog.csdn.net/FungLeo/article/details/51596404

2016年06月08日修复BUG说明

之前考虑的代码没有考虑过数组内一个字段的内容包含另一个字段的内容的这种特殊情况,导致这样的情况下会判断数组是重复的,其实是没有重复的。

举个例子:

代码语言:javascript
复制
var arr = ["a","aa"]

如这样的情况,原来的代码就会判断这个是重复的字段了。因此,新的代码加上了双引号,这样就避免了这个问题了。

或许大的项目中的一些BUG也是这样的原因产生的吧:)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • javascript 判断数组中的重复内容的两种方法 by FungLeo
    • 前言
      • 方法一 indexOf() 和 lastIndexOf() 对比法.
        • 方法二 match() 正则对比方法
          • 总结
            • 2016年06月08日修复BUG说明
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档