Javascript 从列表中返回最关键的状态
我正在开发一个javascript,它根据健康检查的状态设置颜色值。字符串颜色值与我正在使用的CSS相关联,字符串状态与报告给该脚本的健康检查相关联 此功能旨在为每个healthcheck设置颜色值,并返回系统的总体状态。总体状态应与最差状况健康检查相对应(例如,如果大多数状态为“正常”,一个状态为“致命”,则总体状态应为“危险”) 当前代码用于设置单个颜色值,但不能设置整体颜色值。是否有一种“优雅”的方式来设置整体的if语句,而不必使用大量嵌套的if语句Javascript 从列表中返回最关键的状态,javascript,Javascript,我正在开发一个javascript,它根据健康检查的状态设置颜色值。字符串颜色值与我正在使用的CSS相关联,字符串状态与报告给该脚本的健康检查相关联 此功能旨在为每个healthcheck设置颜色值,并返回系统的总体状态。总体状态应与最差状况健康检查相对应(例如,如果大多数状态为“正常”,一个状态为“致命”,则总体状态应为“危险”) 当前代码用于设置单个颜色值,但不能设置整体颜色值。是否有一种“优雅”的方式来设置整体的if语句,而不必使用大量嵌套的if语句 function getStatus(
function getStatus(checks) {
var overall = '';
for (j in checks) {
checks[j]['color'] = '';
switch (checks[j].status) {
case 'OK':
checks[j]['color'] = 'success';
break;
case 'INFO':
checks[j]['color'] = 'info';
break;
case 'WARN':
checks[j]['color'] = 'warning';
break;
case 'ERROR':
checks[j]['color'] = 'danger';
break;
case 'FATAL':
checks[j]['color'] = 'danger';
break;
}
}
return overall;
}
我可以这样做:
case 'WARN':
if (overall === "OK" || overall === "INFO") {
overall = 'warning';
}
。。。但这会变得混乱,尤其是在检查“ERROR”时,它必须大于3个值,但小于1。有没有更有效的方法?使用数字而不是字符串,然后(如果我理解您的意图)返回您收到的最高状态。您可以使用关联数组将每个状态的字符串表示形式、错误代码和颜色存储在单独的对象中,并将其四处移动(这样做的优点是您可以关闭开关语句):
没有别的选择了?但有些改进是可能的。 添加另一个for循环+一个开关。如果某个地方有错误,您不需要继续循环,您可以返回“danger”
overall = 'success'
for (j in checks) {
switch (checks[j].status) {
case 'OK':
break;
case 'INFO':
if (overall === 'success')
overall = 'info'
break;
case 'WARN':
if (overall === 'success' || overall === 'warning')
overall = 'warning'
break;
case 'ERROR':
case 'FATAL':
return 'danger'
}
}
按照net.uk.sweet的回答,您可能希望定义一个存储状态值的
medical.status = {
INFO : 0,
OK : 1,
WARNING : 2,
DANGER : 3,
FATAL : 4
}
在代码的其余部分中,您应该指定以下常量之一,而不是为检查[j]
指定字符串值:
checks[j].status = medical.status.DANGER
然后您可以像net.uk.sweet的答案一样使用
var fatal=false代码>并且在致命情况下,将致命设置为true。然后您的返回值是return fatal
,根据它是真是假,显示您喜欢的任何内容。编辑:我看到你需要它的警告,错误和致命?准确吗?这和angularJS有什么关系?这是纯javascript。@CyrilDD你说得对。我在这里包含的部分是纯javascript——角度与我的问题无关。相应地更新。嗯,对不起,我可能会感到困惑:“总体”的可能值是什么?只是‘好’、‘警告’和‘危险’?或“确定”、“信息”、“警告”、“危险”和“致命”?值“确定”、“信息”、“警告”、“危险”和“致命”将被转换为“成功”、“信息”、“警告”或“危险”之一。函数接收包含第一个列表中多个值的var检查。返回的total包含第二个列表中的一个。编辑我的答案以澄清。我更新了我的答案以反映这一点,假设OKchecks[j].status = medical.status.DANGER