【问题标题】:Why can't I do proper iteration over two-dimensional array? [closed]为什么我不能对二维数组进行适当的迭代? [关闭]
【发布时间】:2021-12-07 15:04:45
【问题描述】:

这是我的代码。我想拉起偶数元素。但我只能提4 4 4 4 4

function f6() {
    let out = '';
    let a6 = [[1, 2], [3, 4], [5, 6], [21, 34], [44, 56]];
    for (let i = 0; i < a6.length; i++) {
        for (let i = 0; i < a6[i].length; i++) {
            if (a6[i][i] % 2 == 0) {
                out += a6[i][i] + ' ';
            }
        }
    }
    console.log(out);
}

document.querySelector('button').onclick = f6;
&lt;button&gt;Push!&lt;/button&gt;

为什么?

【问题讨论】:

  • 您为什么要将i 用于两种不同的目的?一个变量不能同时是两个不同的东西。
  • a6[i][i]。您可以看到为什么这不能满足您的要求,对吗?这是打脸,不是误会吧?我的意思是,我可以看到你是怎么做到的。特别是因为你写了i &lt; a6[i].length。那时你只是迷失了方向。也许您应该在循环之前写 let row = a6[i],然后写 for (let i = 0; i &lt; row.length; i++) 并参考 row[i]。但真的……来吧。你只需要有人指出你的脸,对吧?这里没有需要回答的问题。我投票结束,因为错字。

标签: javascript arrays for-loop


【解决方案1】:

您已经使用了两次相同的变量名i。在内部循环中声明 let i 会阻止您从外部循环访问 let i。如果您使用不同的变量名来遍历每个循环,例如j,那你应该没事。

如果您只需要使用索引来访问该索引处的值,那么您可能想尝试使用for...of 循环来完全避免这个问题,例如:

const data = ... // 2D array

for (let row of data) {
    for (let cell of row) {
        // Use cell here
    }
}

【讨论】:

    【解决方案2】:

    您的占位符变量 i 在第二次迭代中被遮蔽,因此您可能希望使用另一个占位符(例如 j)来正确引用该元素。

      function f6() {
        let out = '';
        let a6 = [[1, 2], [3, 4], [5, 6], [21, 34], [44, 56]];
        for (let i = 0; i < a6.length; i++) {
            for (let j = 0; j < a6[j].length; j++) {
                if (a6[i][j] % 2 == 0) {
                    out += a6[i][j] + ' ';
                }
            }
        }
        console.log(out);
    }
    
    document.querySelector('button').onclick = f6;
    &lt;button&gt;Push!&lt;/button&gt;

    【讨论】:

    • 阴影,未覆盖。
    • 您愿意解释更多吗?有什么区别?
    • 当您执行let i = 0; { let i = 1; } 之类的操作时,不会覆盖任何内容。有两个变量i。第一个拥有值0,它的作用域无处不在。第二个i 持有1,其范围仅在块内。引用 i 计算为最近范围的变量。由于两个变量具有相同的名称,因此在块内,i 指的是持有1 的变量。封闭范围的变量遮蔽了另一个。变量根本不会相互覆盖。一旦执行离开这个块,外部的i 就可以再次访问了。
    • 有道理。感谢您的洞察力
    猜你喜欢
    • 2021-08-23
    • 2014-01-13
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2023-01-09
    • 2014-02-17
    相关资源
    最近更新 更多