首页 > 解决方案 > 嵌套循环(FOR)在第二个内带有 IF 语句,仅打印一个结果

问题描述

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

嵌套循环js

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>";
        }
    }
}

我没有来自控制台的错误,但它没有按预期打印。

标签: javascriptloopsfor-loopnested

解决方案


与命令式相比,这可能以声明性方式更好地处理。它会更短,更容易推理。

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

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"]

推荐阅读