继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

递减函数的应用

青春有我
关注TA
已关注
手记 1206
粉丝 205
获赞 1008

在正常遍历数组的情况下,删减自身元素导致的长度不足,影响循环次数不足

解决方案:
使用自身长度递减至0,不会影响循环次数

注意点:i<-1,因为需要递减至0号位置

例子:

// 遍历原数组,不包含新数组的元素将被删除var arr = [1, 2, 3, 4, 5];//原数组var newArr = [3];// 新元素数组for (var j = 0; j < newArr.length; j++) {    for (var i = 0; i < arr.length; i++) {        if (newArr[j] != arr[i]) {
            arr.splice(i, 1);            console.log("删除过程:",arr)
        }
    }
}// 应该删除[1,2,4,5],保留元素应为[3]console.log("final:",arr);/*
result:

删除过程: [ 2, 3, 4, 5 ]
删除过程: [ 2, 3, 5 ]
final: [ 2, 3, 5 ]

*/

原因分析:

  1. 数组的长度是5,毫无疑问,应该循环5次,

  2. 因为第一次删除了自身元素1, 所以倒是长度-1,跳过2的删除,

  3. 不需要删除,执行删除4后,遇到之前的问题,5不会被删除。

解决方案:

  1. 总长度不可变化


var arr = [1, 2, 3, 4, 5];//原数组var newArr = [3];// 新元素数组for (var j = 0; j < newArr.length; j++) {    for (var i = arr.length; i >-1; i--) {        if (newArr[j] != arr[i]) {
            arr.splice(i, 1);            console.log("删除过程:",arr)
        }
    }
}// 应该删除【1,2,4,5],保留元素应为[3]console.log("final:",arr);/*
result:

删除过程: [ 1, 2, 3, 4, 5 ]
删除过程: [ 1, 2, 3, 4 ]
删除过程: [ 1, 2, 3 ]
删除过程: [ 1, 3 ]
删除过程: [ 3 ]
final: [ 3 ]

*/



作者:世外大帝
链接:https://www.jianshu.com/p/7a2e744329ec


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP