字符串去掉重复的两种办法

方法1的优点在于不用建立新的数组,但不易理解;方法2需要建立新的数组,但容易理解。

方法1:

思路:
1. 取数组第1个元素,
2. 从后往前与数组其他元素对比;
3. 若想等,则将匹配的元素移到最后,并记录次数;
4. 取第2个元素,重复2~4步;
5. 最后获得重新排序的数组,后面的都是重复多余的元素,个数与累积的记录次数一致(需要特别注意处理方式);
6. 重新设定数组的长度,获得没有重复元素的数组;

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>repeat</title>
</head>
<body>
    <script>
        var arr = [0,1,3,2,3,5,7,0,1,0,2,2,3,1,0];
        var count = 0;
        var len = arr.length;
        var len2 = arr.length;
        for (var i = 0; i < len2; i++) {//注意len2会随获得的重复次数递减,避免重复计算,保证获得的重复元素数量count是正确的;
            for (var j = len-1-i; j >i; j--) {//注意j的设定,避免重复计算,
                //检测是否重复的循环
                if(arr[i]==arr[j]){
                    //将匹配位置后的内容全部往前移,并将匹配值放到最后
                    var a = arr[j];
                    for (var k = j; k < len-1; k++) {
                        arr[k]=arr[k+1];
                    }
                    arr[len-1]=a;
                    count++;//累积匹配的次数
                    len2--//重复的内容不再计入排查范围,避免重复计算,同时保证count的次数与重复数的数量相同;
                    console.log(arr);
                }
            }
        }
        arr.length=len-count;//重设数组长度,将重复元素去掉
        console.log(arr);
    </script>
</body>
</html>
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

方法2

思路:
1. 建立空的新数组;
2. 将旧数组的元素依次与新数组的元素比对,若未发现相同的元素,则将该元素加入到新数组;

代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
<script type="text/javascript">
    var arr = [0,1,2,3,0,1,2,3,5,6,3,2,1,8,0];
    var arr2 = new Array();
    arr2[0]=arr[0];
    document.write("去除前:"+arr+"<br/>")
    var len1=arr.length;// 8
    var len2=arr2.length;
    var k=1;
    for(var i=1;i<len1;i++){
        var a=-1;//提供判定依据,不匹配为-1,匹配则为0以上的j;
        for(var j=0;j<len2;j++){
            if(arr[i]==arr[j]){//若新元素与新数组内的某个元素重复,则给a赋值j;
                var a=j;
            }
        }
        if(a<0){ //根据a的值判定,a为-1则表示新数组内无元素与新元素相同,可以加入新元素;
            arr2[k]=arr[i];
            len2=arr2.length;
            k++;
        }
    }
    document.write("去除后:"+arr2+"<br/>")
</script>
</body>
</html> 

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
                            </div>
        </article>

方法1的优点在于不用建立新的数组,但不易理解;方法2需要建立新的数组,但容易理解。

猜你喜欢

转载自blog.csdn.net/weixin_44800608/article/details/107700690