如果两个布尔值都为true,但也可以为空或不存在,则返回true

时间:2019-02-04 07:53:45

标签: javascript refactoring sapui5

我有一个关于明确返回true的方式的问题,如果两个布尔值是true但也可以为空。我的意思是可以有一个甚至是非布尔值,也应该是真实的。到目前为止,我使用:

var isSelectedM = true;
var isSelectedE = true;
if(this.getModel("info").getProperty("/dep")) {
    isSelectedM = this.byId("checkBoxM").getSelected();
}
if(this.getModel("info").getProperty("/sta")) {
    isSelectedE = this.byId("checkBoxE").getSelected();
}
return (isSelectedM && isSelectedE);

我在这里看到两个问题-我想将两个值都以false开头,然后可能将它们更改为true,然后花费很多行。我现在不喜欢我的代码,如何使它更清晰?

1 个答案:

答案 0 :(得分:2)

我将使用数组数组,包含getProperty字符串及其链接的byId字符串的子数组,并使用every测试:

const items = [
  ['/dep', 'checkBoxM'],
  ['/sta', 'checkBoxE']
]
return items.every(([prop, id]) => (
  !this.getModel("info").getProperty(prop)
  || this.byId(id).getSelected()
);

这样做的另一个好处是,只需添加到items数组中,它就可以很容易地扩展到3个或更多项目,而只需很少的附加代码。

或者,在丑陋的ES5中:

var items = [
  ['/dep', 'checkBoxM'],
  ['/sta', 'checkBoxE']
];
for (var i = 0; i < items.length; i++) {
  var item = items[i];
  if (this.getModel("info").getProperty(item[0])
  && !this.byId(item[1]).getSelected()) {
    return false;
  }
}
return true;

如您所见,该代码更加冗长且难以理解-我建议改用Babel和polyfills。