如何避免JQuery中的if/else循环

Nav*_*ddy 2 javascript jquery refactoring

下面的代码工作得很好,但if/else语句看起来很长很难看.有没有办法可以避免这些陈述?

CommissionTypeFilterVm是一个列表,其中包含下面显示的6个属性,其值为10.我想根据这些属性的值启用和禁用复选框:

CommissionType
CommissionTrials
OverrideType
OverrideTrials
BonusType
AdjustmentType
Run Code Online (Sandbox Code Playgroud)

这是代码:

   if (view != null) 
        {
            if (view.CommissionTypeFilterVm !=null && view.CommissionTypeFilterVm.length>0)
            {
                if (view.CommissionTypeFilterVm[0].CommissionType != 1) {
                    this.$commissionType.prop("checked", false).prop("disabled", true);
                } else {
                    this.$commissionType.prop("disabled", false).prop("checked", true);
                }
                if (view.CommissionTypeFilterVm[0].CommissionTrials != 1) {
                    this.$commissionTrails.prop("checked", false).prop("disabled", true);
                } else {
                    this.$commissionTrails.prop("disabled", false).prop("checked", true);
                }
                if (view.CommissionTypeFilterVm[0].OverrideType != 1) {
                    this.$overrideType.prop("checked", false).prop("disabled", true);
                } else {
                    this.$overrideType.prop("disabled", false).prop("checked", true);
                }
                if (view.CommissionTypeFilterVm[0].OverrideTrials != 1) {
                    this.$overrideTrails.prop("checked", false).prop("disabled", true);
                } else {
                    this.$overrideTrails.prop("disabled", false).prop("checked", true);
                }
                if (view.CommissionTypeFilterVm[0].BonusType != 1) {
                    this.$bonusType.prop("checked", false).prop("disabled", true);
                } else {
                    this.$bonusType.prop("disabled", false).prop("checked", true);
                }
                if (view.CommissionTypeFilterVm[0].AdjustmentType != 1) {
                    this.$adjustmentType.prop("checked", false).prop("disabled", true);
                } else {
                    this.$adjustmentType.prop("disabled", false).prop("checked", true);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 10

它可能取决于您的确切view.CommissionTypeFilterVm[0]对象(它具有哪些其他属性)但看起来您尝试这样做:

var com = view.CommissionTypeFilterVm[0];
for (var key in com) { // if necessary check ownProperty
   this['$'+key.charAt(0).toLowerCase()+key.slice(1)]
      .prop({checked: com[key]==1, disabled: com[key]!=1});
}
Run Code Online (Sandbox Code Playgroud)

  • `this ['$'+ key.lowerCaseFirst()].prop({checked:com [key] == 1,disabled:com [key]!= 1})`,但+1 (2认同)
  • @KevinB:这不是官方的.你可以将它添加到String.prototye,但它足以描述:-) (2认同)