Javascript去掉数组重复内容的2种办法

来源:互联网 发布:淘宝上买手表可靠吗 编辑:程序博客网 时间:2024/06/05 02:00

方法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>

方法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 0