我有一个这样定义的布尔表达式:
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
有没有一种简单的方法可以进行比较而不需要检查对象的整个树tree? (如果未定义任何步骤,停止在树中继续前进吗?)
答案 0 :(得分:1)
由于听起来您已经在使用lodash,如何使用lodash's _.get()
function?
const actif = _.get(this.props, "configuration.puissance", 0) > 0;
有a proposal for an optional chaining property in JavaScript,但尚未纳入语言。如果有的话,您可以执行以下操作:
const actif = this.props?.configuration?.puissance || 0 > 0;