js数组去重的问题

方式1:

<script>
    function getsome(){
        let result=[];
        let a=[1,2,3,2,3,4,2,1,5];
        for(let i=0;i<a.length;i++){
            for(let j=i+1;j<a.length;j++){
                if(a[i]==a[j]){
                    let num=a.splice(j,1);
                    result.push(num);
                    j--;
                }
            }
        }
        console.log(a);
        return result;
    }

    var jieguo=getsome();
    console.log("重复元素组成的数组"+jieguo+"\n"+"该数组的长度"+jieguo.length);
   
</script>

运行结果:
[1, 2, 3, 4, 5]
重复元素组成的数组1,2,2,3
该数组的长度4

补充:该方法最终得到了里面重复的元素组成的数组,并且去除掉了原数组中的重复的元素,但是它的时间复杂度o(n^2)。

方式二:

<script>
    function getResult(){
        let a=[3,2,4,2,1,45,4,6];
        a.sort(function(num1,num2){
            return num1-num2;
        });
        //console.log(a);sort方法会改变原数组顺序
        let result=[a[0]];
       // console.log(result);
        for(let i=1;i<a.length;i++){
            if(a[i]!==result[result.length-1]){
                result.push(a[i]);
            }
        }
        return result;
    }
    var res=getResult();
    console.log(res);
</script>

运行结果:
[1, 2, 3, 4, 6, 45]

总结:该方法时间复杂度方面较第一次来说,明显减少,但是还是存在很大的局限性。
首先它是先对数组进行排序,然后申请一个空间用来存放排好序的第一个元素值,然后循环遍历剩下的值,当遇到该数组里面没有的便添加进来。但是呢,它改变了数组原来的顺序。

方法三:

<script>
    function getResult(){
        let a=[2,2,3,4,5,6,2,3];
        let result=[];
        for(let i=0;i<a.length;i++){
            if(result.indexOf(a[i])===-1){
                result.push(a[i]);
            }
        }
        return result;
    }
    var res=getResult();
    console.log(res);
</script>

运行结果:
[2, 3, 4, 5, 6]
总结:该方法相比上一个就好很多了,它并没有改变数组的顺序。它先是顶一个一个空的数组,然后遍历原来的数组a,只要是result数组里面没有的就都添加到这个result数组里面,最终得到的result数组就是去重之后的数组。(用到了数组的indexOf()方法)

猜你喜欢

转载自blog.csdn.net/Kratial/article/details/82924829