数组的塌陷问题

当数组在执行删除单元操作时被删除单元之后的单元会向前进一位进而顶替被删除的单元,会造成数组的长度减少的情况这种现行叫做数组塌陷。当我们在利用数组的索引下标进行一些操作时要特别注意这个问题。
例如:去除数组中重复的元素

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

        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);
            // 当前数据与下一个数据比较
            // 冒泡排序的优化原理:只要循环到倒数第二个单元
            // 就会通过i+1 与最后一个单元比较
            // 比较到最后一个单元,循环只要执行到,倒数第二个单元
            for(var i = 0 ; i <= newArr.length-1 -1 ; i++){
                if(newArr[i] === newArr[i+1]){
                    // 删除后一个单元
                    newArr.splice(i+1 , 1);
                    // 防止数组坍塌,造成有单元没有执行操作
                    i--;
                }
            }
            return newArr;
        }



在for循环中因为使用删除操作当删除前一个元素,后一个元素会向前顶替那么在正常的循环里就会有元素不会被循环到,产生问题,加上一个if判断完美解决塌陷问题。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值