javascript - 分解这个嵌套的 for 循环

标签 javascript arrays algorithm for-loop

我试图理解嵌套的 forloops,我发现这段代码应该很简单,我希望你确保我理解它。

var maximum = function(arr){
var out;
for(var i = 0; i < arr.length; i++){
     out = true;
    console.log(i)
    for(var j = 0; j < arr.length; j++){

        if(arr[i] < arr[j]){
            // console.log(i, j)
            out = false;
             // console.log(arr[i], arr[j], " out ", out)
        }
    }
    if(out) return arr[i];
}
// return null;
}
 console.log(maximum([1,2,5]))

首先我不确定他们为什么定义 out = true但我现在想理解循环

所以对于第一次迭代

i设置为 0 和 out设置为 true 然后我们进入第二个 for 循环

我= 0

在第二个 forloop 中:for(var j = 0; j < arr.length; j++){

我们测试(arr[i] < arr[j]) 3次为数组长度

内部循环中的第一个测试:arr[0] = 1 < arr[0] = 1 ==false(所以我们什么都不做?不应该保持 true 我们返回 if(out) return arr[i]; 吗?)

内循环中的第二次测试 arr[0] = 1 < arr[1] = 2 == true.. set out为假

内部循环中的第 3 次测试 arr[0] = 1 < arr[2] = 5 == true .. set out为假

然后我们去制作i 1

然后我们测试 arr[i] = 2 < arr[j] 是 1 吗? false 我们不打算 false

是 arr[i] = 2 < arr[j] 还是 2? false 我们不打算 false

是 arr[i] = 2 < arr[j] 还是 5?是的,我们设置了out为真

然后我们设置i至 2 到达 [2] = 5 是 arr[2] 是 5 < arr[0] 是 1 这是假的所以 out 仍然是真的

是 arr[2] 是 5 < arr[1] 是 2 这是假的所以 out 仍然是真的

是 arr[2] 是 5 < arr[2] 是 5 这是假的所以 out 仍然是真的

嵌套循环的更正过程是什么?

最佳答案

是的,您已经掌握了要点。内部循环(使用 j 作为计数器变量的循环)将运行 3 次,每次外部循环(i 循环)运行一次。

理解这一点的更简单方法是运行这段代码:

for (var i = 0; i < 3; i += 1){
    console.log("outer loop")
    for (var j = 0; j < 3; j += 1){
        console.log("inner loop")
    }
}

这使您可以只关注嵌套循环,而不是绊线变量以及您发布的原始代码中的此类变量。

关于javascript - 分解这个嵌套的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34057086/

相关文章:

javascript - 创建一个函数,它接受一个对象数组并根据条件返回一个新数组

java - 生成一个包含唯一随机整数的数组,检查重复项

java - 从递归方法返回时需要帮助

algorithm - 八叉树的近似最近邻算法

javascript - 我们可以使用单个表单标签的操作发送两个 post 请求吗?

javascript - 从 json 制作 slider

javascript - Pjax 并在特定页面上重新加载 JavaScript

javascript - ember-data 属于不工作

arrays - 使用公共(public)键 golang 合并两个 JSON 数组

algorithm - 如何提取具有一定数量的公共(public)子节点的节点组