双重for循环数组去重

//封装方法,参数为数组
        function q(arr) {
            // 外部循环获取前面需要对比的初始数
            for (var i = 0; i < arr.length; i++) {
                // 内部循环获取后面需要与前面对比的比较数
                for (var j = i + 1; j < arr.length; j++) {
                    // 如果后面出现与前面相同的数则进入if判断内
                    if (arr[i] == arr[j]) {
                        // 用数组方法删除后面相同的数
                        arr.splice(j, 1)
                        // 删除数组内的数后,数组长度发生变化
                        // 循环j自增,会导致向前替位的数无法进行比较
                        // 所以进行自减继续从替位位置进行比较
                        j--
                    }
                }
            }
            return arr
        }

数组去重

在数组中删除重复出现的项

调用方法进行数组去重

var arr1 = [1, 4, 2, 1, 1, 2, 2, 3, 4, 4, 3, 3]
// 输出去重后的数组
console.log(q(arr1))

结果:(4) [1, 4, 2, 3]

双重for循环运行逻辑

数组:[1, 4, 2, 1, 1, 2, 2, 3, 4, 4, 3, 3]

下标: 0  1  2  3  4  5  6  7  8  9 10 11   数组下标从0开始

用1与其他数对比,删除后面重复出现的1

[1,4,2,2,2,3,4,4,3,3]

用4与其他数对比,删除后面重复出现的4

[1,4,2,2,2,3,3,3]

用2与其他数对比,删除后面重复出现的2

[1,4,2,3,3,3]

用3与其他数对比,删除后面重复出现的3

[1,4,2,3]

j--的解释

          ↓

[1,4,2,1,1,2,2,3,4,4,3,3]

[1,4,2,1,2,2,3,4,4,3,3]

在1进行对比找到第一个重复的1时,删除后面重复出现的1,数组长度发生变化,后续数向前替位

但循环中替位上来的数这个位置已经进行了对比,j++会导致跳过向前替位的这个数的比较

所以在对比删除重复的数后需要进行j--,确保循环继续从替位的位置进行对比

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值