【问题标题】:Nested loop (FOR) with IF statement inside 2nd for print just one result嵌套循环(FOR)在第二个内带有 IF 语句,仅打印一个结果
【发布时间】:2019-07-01 17:16:35
【问题描述】:

基本上我有 2 个数组,一个带有一些代码,另一个带有代码和相关描述,我需要做的是匹配代码并打印描述,但我的代码(显然)停在内部 FOR(我附上了截图以便更好地理解)。 如果我从代码中删除 IF 语句,它会按原样打印 2 的计数器。

for (x=0; x<causeoferrorlength; x++)
{
    document.getElementById("mdataresult").innerHTML += "x "+causeoferrorsplit[x]+"</br>";
    for(k=0; k<78; k++)
    {
        if ( causeoferrorsplit[x] === gbrucausesoferror[k][0] )
        {
            document.getElementById("mdataresult").innerHTML += "k "+gbrucausesoferror[k][0]+"</br>";
        }
    }
}

控制台没有错误,但没有按预期打印。

【问题讨论】:

    标签: javascript loops for-loop nested


    【解决方案1】:

    这可能在declarative way versus imperative 中处理得更好。它会更短更容易推理。

    假设您使用了两个数组,并且第一个数组中的代码将始终在第二个数组的某个位置找到:

    let causes = ["001", "003", "005"];
    let codes = [
            ["001","Earthquake"],
            ["002","Sunspots"],
            ["003","User Error"],
            ["004","Snakes"],
            ["005","Black Magic"]
    ];
    let results = causes.map( cause => codes[ codes.findIndex( code => code[0] === cause ) ][1] );
    console.log(results); // ["Earthquake", "User Error", "Black Magic"]
    

    这里发生了什么?我们将潜在错误原因数组(第一个数组)映射到从第二个数组中获取的描述列表。

    • Array.map 采用一个对每个数组成员调用一次的函数。我们称该成员为“原因”。

    • Array.findIndex 采用一个函数,该函数为每个数组成员调用一次。我们称该成员为“代码”。

    • 对于原因中的每个“原因”,我们在代码中找到第一个数组值等于原因的索引,然后返回第二个数组值,即描述。

    如果您能够将第二个数组更改为对象,那么这将变得更简单:

    let causes = ["001", "003", "005"];
    let codes = {
      "001":"Earthquake",
      "002":"Sunspots",
      "003":"User Error",
      "004":"Snakes",
      "005":"Black Magic"
    };
    let results = causes.map( cause => codes[cause] );
    console.log(results); // ["Earthquake", "User Error", "Black Magic"]
    

    【讨论】:

    • Wooo.. 这是有史以来最好的解释.. 非常感谢,今天我会尝试这种方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2015-03-04
    • 1970-01-01
    相关资源
    最近更新 更多