澄清此Javascript三元

问题描述 投票:0回答:3

有人可以将此嵌套的三元拆分成多个三元或其他代码,也可以用英语解释吗?我从来没有遇到过像这样的嵌套三元数,所以我不确定操作顺序:

var EqualizeCheck = (IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON) ? (EqualizeCompleteTime != "") ? (EqualizeCompleteTime <= CurrentDateTime) ? true : false : false : true;
javascript jscript conditional-operator ternary
3个回答
0
投票

你去:

let EqualizeCheck;

if (IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON) {
  if (EqualizeCompleteTime != "") {
    if (EqualizeCompleteTime <= CurrentDateTime) {
      EqualizeCheck = true;
    } else {
      EqualizeCheck = false;
    }
  } else {
    EqualizeCheck = false;
  }
} else {
  EqualizeCheck = true;
}

我知道不是你写的,但是我应该指出,嵌套这么多的三元表达式是一种不好的做法,并且会导致代码不可读。


0
投票

要获得更好的主意,只需将其打破并尝试应用if-else,您就可以轻松理解。 @Sagi Rika提到的事情也是正确的,许多三元表达式的嵌套会降低代码的可读性,从而导致难以理解。

var EqualizeCheck = (IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON)
    ? (EqualizeCompleteTime != "") 
    ? (EqualizeCompleteTime <= CurrentDateTime) 
    ? true 
    : false 
    : false 
    : true;

如果您将其破坏,则将如下所示:

var EqualizeCheck;

if (IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON) {
   if (EqualizeCompleteTime != "") {
      if (EqualizeCompleteTime <= CurrentDateTime) {
         EqualizeCheck = true;
      } else {
         EqualizeCheck = false;
      }
   } else {
         EqualizeCheck = false;
   }
} else {
     EqualizeCheck = true;
}

0
投票

要逐步进行操作,请首先分离最嵌套的条件(寻找完整的condition ? value : value语句),在这种情况下,就是这样:

var EqualizeCheck =(IIO.ReadDigitalInput(IO_GROUP_CHARGERS,subGroupName,IO_ITEM_ENABLEEQUALIZE)== IO_INPUT_ON)? (EqualizeCompleteTime!=“”))? ((EqualizeCompleteTime <= CurrentDateTime)? true:false:false:true;

将其分离出来并针对每个三元条件重复,直到您遇到类似这样的事情:

(IIO.ReadDigitalInput(IO_GROUP_CHARGERS, subGroupName, IO_ITEM_ENABLEEQUALIZE) == IO_INPUT_ON) ? 
    // Condition 1 is true, check the next condition
    (EqualizeCompleteTime != "") ? 
      // Condition 2 is true, check the next condition
      (EqualizeCompleteTime <= CurrentDateTime) ? 
        // Condition 3 is true, return true
        true :
        // Condition 3 is false, return false
        false :
      // Condition 2 is false, return false
      false :
    // Condition 1 is false, return true
    true;
© www.soinside.com 2019 - 2024. All rights reserved.