简化包含潜在未定义变量的布尔表达式
Simplify boolean expression containing potentially undefined variables
我有一个这样定义的布尔表达式:
const actif =
this.props.configuration &&
this.props.configuration.puissance &&
this.props.configuration.puissance > 0
根据组件,this.props。可能有或没有 configuration
,configuration
可能有或没有 puissance
。这就是为什么我需要进行所有这些验证。
使用 { has } from 'lodash'
,我已经能够简化一点:
const actif =
has(this.props.configuration, 'puissance') &&
this.props.configuration.puissance > 0
但这也不是很令人满意。
我尝试了其他方法。我知道 JS 允许你做这样的事情:
(undefined || 4) === 4
这是真的。不幸的是,
(this.props.configuration.puissance || undefined ) > 0
还是给我Cannot read property 'puissance' of undefined
有没有一种简单的方法可以进行这种比较而不必检查对象的整个树? (如果任何步骤未定义,就停止在树中继续前进?)
既然听起来你已经在使用 lodash,那么使用 lodash's _.get()
function 怎么样?
const actif = _.get(this.props, "configuration.puissance", 0) > 0;
有 a proposal for an optional chaining property in JavaScript,但它还没有变成语言。 When/if 是的,你可以这样做:
const actif = this.props?.configuration?.puissance || 0 > 0;
我有一个这样定义的布尔表达式:
const actif =
this.props.configuration &&
this.props.configuration.puissance &&
this.props.configuration.puissance > 0
根据组件,this.props。可能有或没有 configuration
,configuration
可能有或没有 puissance
。这就是为什么我需要进行所有这些验证。
使用 { has } from 'lodash'
,我已经能够简化一点:
const actif =
has(this.props.configuration, 'puissance') &&
this.props.configuration.puissance > 0
但这也不是很令人满意。
我尝试了其他方法。我知道 JS 允许你做这样的事情:
(undefined || 4) === 4
这是真的。不幸的是,
(this.props.configuration.puissance || undefined ) > 0
还是给我Cannot read property 'puissance' of undefined
有没有一种简单的方法可以进行这种比较而不必检查对象的整个树? (如果任何步骤未定义,就停止在树中继续前进?)
既然听起来你已经在使用 lodash,那么使用 lodash's _.get()
function 怎么样?
const actif = _.get(this.props, "configuration.puissance", 0) > 0;
有 a proposal for an optional chaining property in JavaScript,但它还没有变成语言。 When/if 是的,你可以这样做:
const actif = this.props?.configuration?.puissance || 0 > 0;