javascript - 嵌套循环(FOR)在第二个内带有 IF 语句,仅打印一个结果
问题描述
基本上我有 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>";
}
}
}
我没有来自控制台的错误,但它没有按预期打印。
解决方案
与命令式相比,这可能以声明性方式更好地处理。它会更短,更容易推理。
假设您正在使用两个数组,并且第一个数组中的代码将始终在第二个数组中的某处找到:
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"]
推荐阅读
- django - 如何在 Django 模型的 TextField 中使用静态文件?
- node.js - 将“object”类型无效用作 Firestore 参数
- javascript - Window.print() 函数和 document.execCommand('print') 函数在 MS Edge 中不起作用
- r - 为什么 R 中的 adonis2() vegan 函数会重现 NA/NaN/inf 错误?
- tmux - 如何调整窗格的大小以占据整个 tmux 窗口的一定百分比?
- azure - Azure WebJobs SDK 3.0 中的“Settings.job”和“TimerTrigger”有什么区别
- react-native - 添加
从 react-native-elements 到 bottomTabNavigator 显示错误 - arduino - 如何将 tinygps 与 ttl 串行通信一起使用?
- vb.net - 为什么使用 Filestream 复制文件移动很快,然后在完成之前有很长的延迟?
- javascript - 在 Angular 中单击 amcharts4 中的自定义图例时切换列系列