JavaScript的数组去重

一、indexOf()

    var arr = [1,2,2,3,5,3,1,5,4,3,4,5,6];
    //定义一个新数组
    var arr2 = setNewArr(arr);
    console.log(arr2);
    //执行去除重复数据的数组
    function setNewArr(arr){
        //定义一个新数组
        var newArr = [];
        //执行循环
        arr.forEach(function(v){
            //执行判断字符出现位置
            if(newArr.indexOf(v) == -1){
                //如果newArr中没有该数据,就写入数据到newArr中
                newArr.push(v);
            }
        })
        return newArr;
    }

注:forEach不能用于对象

二、双重for循环

    var arr123 = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];
    //封装一个循环判断函数
    function setNewArr2(arr){
        //外层循环,从第一个开始,循环至最后
        for(var i = 0; i <= arr.length-1;i++){
            //内层循环,从循环次数的第二个开始,循环至最后
            for(var j = i+1 ; j <= arr.length-1 ; j++){
                //判断第一个和第二个是不是全等,如果是,则将第二个删除,同时j向前移动一位
                if(arr[i] === arr[j]){
                    arr.splice(j,1);
                    j--;
                }
            }
        }
        return arr;
    }
    //引用变量执行函数
    var newArr = setNewArr2(arr123);
    console.log(newArr);

注:
循环操作数组,只要执行了删除数组单元的操作
一定要将循环变量数值执行 – (自身减减)操作

三、先排序,后去重

概念:先将数组中的数值,排列顺序,后比较删重复值

         var arr = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];
        //定义一个新数组
        var newArr =setNewArr3(arr);
        console.log(newArr);
        //封装一个函数
        function setNewArr3(arr){
            //先对数组进行排序操作,相同数据,相邻
            var newArr = arr.sort(function(a,b){return a-b});
            console.log(newArr);
            //相邻数组进行比对
            for(var i = 0;i <= arr.length - 1;i++){
                //如果相邻数组相同,则删除后面的数据,同时与下一个补位数据进行对比
                if(newArr[i] === newArr[i+1]){
                    newArr.splice(i+1, 1)
                    i--;
                }
            }
            return newArr;
        }

注:
先将数组中的数值,按照大小顺序,排列
排序之后,相同的数值,一定是相邻的
此时,只要相邻的两个数值比较,如果相同,删除后一个数据,再执行 i–
使用一层循环就可以了
循环次数就比较少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值