【问题标题】:For loop ES6 no longer WorkingFor loop ES6 不再工作
【发布时间】:2016-03-11 10:54:47
【问题描述】:

我向上帝发誓这是有效的,我知道这是因为我的测试通过了一段时间......现在它没有。请参阅下面的错误屏幕截图。

describe('', () => {

    let newBoard;

    beforeEach(() => {
        newBoard = new board();
    });

    it('', () => {
        for(let row in newBoard){
            for(let column in row){
                newBoard[row][column].should.equal("");
            }
        }
    });
});

board.js

module.exports = function(){
    return  [["", "", ""],
             ["", "", ""],
             ["", "", ""]];
};

【问题讨论】:

  • 这不可能像预期的那样工作......第二个循环应该是for (let column in newBoard[row])。 (或使用 for-of 循​​环)。
  • @LeeTaylor 在截图中说:newBoard: Array[3]
  • 代码不会神奇地停止工作,上帝或非上帝。
  • 抱歉,我忘记展示新板了。让我更新。
  • @WTF你能验证newBoard是一个长度为3的数组吗?

标签: javascript node.js ecmascript-6


【解决方案1】:

@RobW 的评论应该是问题所在:for (let column in newBoard[row]).

我想补充一个建议​​:由于您使用的是 ES6,您可能希望使用 for of 循环:

it('', () => {
    for(let row of newBoard){
        for(let cell of row){
            cell.should.equal("");
        }
    }
});

【讨论】:

    【解决方案2】:

    首先是一些家务用品。你有一个 for-in 循环,而不是一个 for 循环。对于学习 JavaScript 的人来说,for-in 循环是一个常见的错误来源,因为它看起来像你想要的那样,但它不是用于迭代数组。它的意思是迭代对象的属性。

    您正在寻找的新 ES6 循环称为for-of loop。它的工作是遍历数组中的项目。在您的示例中,尝试更改您的代码以使用 for-of 循​​环。

    it('', () => {
        for(let row of newBoard){
            for(let column of row){
                column.should.equal("");
            }
        }
    });
    

    【讨论】:

    • 应该是for(let cell of row){ cell.should.equal(""); }
    • 是的,刚刚修好了。添加答案太快而没有校对。
    【解决方案3】:

    在您的内部循环中,您要求它为每个项目创建一个变量column,这是一个数字对象。 for in 构造为您提供newBoard 数组中每个项目的索引。

    内部循环需要访问为newBoard 指定的索引处的数组,以便您的代码变为for(let column in newBoard[row])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多