如何使用嵌套的for循环优化函数

时间:2017-11-11 14:03:23

标签: javascript memory optimization

我有一个function,它有一个嵌套的for loop。随着function迭代更多数据,它开始变慢。如何才能最好地优化此功能,使其运行速度更快?

function rubicoGVB(arr, range) {
    var res = [];
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if ((arr[i] + arr[j]) / range < 16487665) {
                res.push(arr[i]);
            }
        }
    }

    return res.length;
}

1 个答案:

答案 0 :(得分:2)

(Fast Snail in this comment描述了你可以做出的最大改进:你不需要res数组只是为了返回它的长度;只需使用一个计数器。以下是其他改进你可以做。)

看看这些循环,你可以做的很少:

  1. 缓存数组的长度,

  2. 缓存arr[i]而不是在j循环中重复查找

  3. ...这些是最小的(但是真实的)改进,请参阅下面的lenentry

    function rubicoGVB(arr, range) {
        var res = [];
        var len = arr.length;
        var entry;
        for (var i = 0; i < len; i++) {
            entry = arr[i];
            for (var j = i + 1; j < len; j++) {
                if ((entry + arr[j]) / range < 16487665) {
                    res.push(entry);
                }
            }
        }
    
        return res.length;
    }