递减函数的应用

作者: 世外大帝 | 来源:发表于2018-11-02 11:58 被阅读4次

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

    解决方案:
    使用自身长度递减至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.haomeiwen.com/subject/ftgqxqtx.html