嵌套循环(FOR),其中IF语句位于第二个内部,仅打印一个结果

时间:2019-07-01 17:16:35

标签: javascript loops for-loop nested

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

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

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

1 个答案:

答案 0 :(得分: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"]