Javascript 简化这个IF结构

Javascript 简化这个IF结构,javascript,Javascript,你能帮我简化这个IF结构吗?这是一个类似javascript的节点,但它是专有的,所以请忽略db.execute stuff:) 将此理解为: 如果不是运输部 试着从计费部门取发货部门 如果不是运输部门,而是邮政编码 尝试从邮政编码中获取运输部门 如果仍然不是运输部门 失败 将此理解为: 如果不是运输部 试着从计费部门取发货部门 如果不是运输部门,而是邮政编码 尝试从邮政编码中获取运输部门 如果仍然不是运输部门 失败 您不需要shipError变量,只需在末尾再次测

你能帮我简化这个IF结构吗?这是一个类似javascript的节点,但它是专有的,所以请忽略db.execute stuff:)

将此理解为:

  • 如果不是运输部
    • 试着从计费部门取发货部门
  • 如果不是运输部门,而是邮政编码
    • 尝试从邮政编码中获取运输部门
  • 如果仍然不是运输部门
    • 失败
将此理解为:

  • 如果不是运输部
    • 试着从计费部门取发货部门
  • 如果不是运输部门,而是邮政编码
    • 尝试从邮政编码中获取运输部门
  • 如果仍然不是运输部门
    • 失败

您不需要
shipError
变量,只需在末尾再次测试
if(!Shipping.Division)
。这可以消除变量声明(显然),但也可以删除仅用于设置
shipError=true
if
else
。结果是这样的:

if(!("Division" in Shipping)) {
   Shipping.Division = Billing.Division;
   if(!Shipping.Division) {
      if(Shipping.PostalCode) {
         Shipping.Division = Db.ExecuteScalar("SELECT statement here",
                                              Shipping.PostalCode);
      }    
   }
   if(!Shipping.Division){
      Errors.push({Code : "SHIPPINGDIVISION", Message : "Shipping State Required"});
      Shipping.Division = "";
   }
} 

您不需要
shipError
变量,只需在末尾再次测试
if(!Shipping.Division)
。这可以消除变量声明(显然),但也可以删除仅用于设置
shipError=true
if
else
。结果是这样的:

if(!("Division" in Shipping)) {
   Shipping.Division = Billing.Division;
   if(!Shipping.Division) {
      if(Shipping.PostalCode) {
         Shipping.Division = Db.ExecuteScalar("SELECT statement here",
                                              Shipping.PostalCode);
      }    
   }
   if(!Shipping.Division){
      Errors.push({Code : "SHIPPINGDIVISION", Message : "Shipping State Required"});
      Shipping.Division = "";
   }
} 

你试过使用谷歌闭包吗

它是一个javascript优化器。尝试一下,看看它是如何优化代码的,如果您喜欢某些优化,可以在代码中使用它

从页面上

JavaScript优化器 闭包编译器将JavaScript编译成紧凑的高性能代码。编译器删除死代码,重写并最小化剩下的代码,以便快速下载和运行。它还检查语法、变量引用和类型,并警告常见的JavaScript陷阱。这些检查和优化可以帮助您编写出bug更少、更易于维护的应用程序。您可以将编译器与闭包检查器一起使用,闭包检查器是一个Firebug扩展,它使调试模糊代码几乎与调试人类可读的源代码一样简单

链接

您的代码已优化

if(!("Division" in Shipping)) {
  var shipError = !1;
  Shipping.Division = Billing.Division;
  if(!Shipping.Division) {
    Shipping.PostalCode ? (Shipping.Division = Db.ExecuteScalar("SELECT Code from    Location.Division D JOIN Location.PostalCode P ON DivisionId = D.ID AND PostalCode=?",  Shipping.PostalCode), Shipping.Division || (shipError = !0)) : shipError = !0
  }
  if(shipError) {
    Errors.push({Code:"SHIPPINGDIVISION", Message:"Shipping State Required"}),      Shipping.Division = ""
  }
}
;

你试过使用谷歌闭包吗

它是一个javascript优化器。尝试一下,看看它是如何优化代码的,如果您喜欢某些优化,可以在代码中使用它

从页面上

JavaScript优化器 闭包编译器将JavaScript编译成紧凑的高性能代码。编译器删除死代码,重写并最小化剩下的代码,以便快速下载和运行。它还检查语法、变量引用和类型,并警告常见的JavaScript陷阱。这些检查和优化可以帮助您编写出bug更少、更易于维护的应用程序。您可以将编译器与闭包检查器一起使用,闭包检查器是一个Firebug扩展,它使调试模糊代码几乎与调试人类可读的源代码一样简单

链接

您的代码已优化

if(!("Division" in Shipping)) {
  var shipError = !1;
  Shipping.Division = Billing.Division;
  if(!Shipping.Division) {
    Shipping.PostalCode ? (Shipping.Division = Db.ExecuteScalar("SELECT Code from    Location.Division D JOIN Location.PostalCode P ON DivisionId = D.ID AND PostalCode=?",  Shipping.PostalCode), Shipping.Division || (shipError = !0)) : shipError = !0
  }
  if(shipError) {
    Errors.push({Code:"SHIPPINGDIVISION", Message:"Shipping State Required"}),      Shipping.Division = ""
  }
}
;

你为什么要简化它?它是否工作得不好,或者是否存在任何模糊的bug、性能问题?没有更简单的方法来实现它。为什么要简化它?它是否工作不正常,或者是否存在任何模糊的错误、性能问题?没有更简单的方法来解决。这很好,但您还需要尝试将
Shipping.Division
设置为
Billing.Division
如果(!Shipping.Division&!(Shipping.Division=Billing.Division)&&Shipping.PostalCode){…}将更准确地反映原始算法…@Tikhon我在这里给出一个示例,而不是编写生产代码。@nnn此示例仅包括
if
逻辑,而不包括预处理、后处理和中间处理。够清楚吗?:)但它不包括所有的
if
逻辑,因为(正如蒂肯也指出的)在设置
Shipping.Division
Billing.Division
之后,还有一个额外的
if
。我相信如果您将第一个
if
替换为我之前评论中的一个,那么您的回答将涵盖整个过程,包括中间处理。这很好,但您还需要尝试将
Shipping.Division
设置为
Billing.Division
if(!Shipping.Division&!(Shipping.Division=Billing.Division)&&Shipping.PostalCode){…}将更准确地反映原始算法…@Tikhon我在这里给出一个示例,而不是编写生产代码。@nnn此示例仅包括
if
逻辑,而不是预处理、后处理和中间处理。是否足够清楚?:)但它不包括所有的
if
逻辑,因为(正如蒂肯也指出的)在设置
Shipping.Division
Billing.Division
之后,还有一个额外的
if
。我相信,如果您将第一个
if
替换为我之前评论中的一个,那么您的回答将涵盖整个问题,包括处理之间的问题。不要认为自动优化的代码是最好的。@deceze和me给出的答案同样简短,但都完全消除了
shipError
变量,而且都更易于阅读,因此更易于维护。问题是关于“简化”,但是在谷歌关闭版本的中间的那行,开始<代码> SpabPin。PASSCODE?<代码>是愚蠢的-是的,它做同样的事情;不要认为自动优化的代码是最好的。@deceze和me给出的答案同样简短,但都完全消除了
shipError
变量,而且都更易于阅读,因此更易于维护。问题是关于“简化”,但是在谷歌关闭版本中间的那一行,开始<代码> SpabPin。