为了账号安全,请及时绑定邮箱和手机立即绑定

递减函数的应用

标签:
算法

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

解决方案:
使用自身长度递减至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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消