基本上我有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>";
}
}
}
控制台没有错误,但没有按预期打印。
答案 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"]