Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从列表中返回最关键的状态_Javascript - Fatal编程技术网

Javascript 从列表中返回最关键的状态

Javascript 从列表中返回最关键的状态,javascript,Javascript,我正在开发一个javascript,它根据健康检查的状态设置颜色值。字符串颜色值与我正在使用的CSS相关联,字符串状态与报告给该脚本的健康检查相关联 此功能旨在为每个healthcheck设置颜色值,并返回系统的总体状态。总体状态应与最差状况健康检查相对应(例如,如果大多数状态为“正常”,一个状态为“致命”,则总体状态应为“危险”) 当前代码用于设置单个颜色值,但不能设置整体颜色值。是否有一种“优雅”的方式来设置整体的if语句,而不必使用大量嵌套的if语句 function getStatus(

我正在开发一个javascript,它根据健康检查的状态设置颜色值。字符串颜色值与我正在使用的CSS相关联,字符串状态与报告给该脚本的健康检查相关联

此功能旨在为每个healthcheck设置颜色值,并返回系统的总体状态。总体状态应与最差状况健康检查相对应(例如,如果大多数状态为“正常”,一个状态为“致命”,则总体状态应为“危险”)

当前代码用于设置单个颜色值,但不能设置整体颜色值。是否有一种“优雅”的方式来设置整体的if语句,而不必使用大量嵌套的if语句

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