不知道如何更好地说出这个(因此,找不到以前的答案,虽然我希望之前已经得到了回答),但我对是否有办法转换代码感兴趣:
if ( this.props.mailboxFilter == 'sent' ) { return this.currentUser.canActOnBehalfOf( m.senderID ); } else { return !this.currentUser.canActOnBehalfOf( m.senderID ); }
对于类似下面的内容(不确定如何更好地表达它):
var bangOrNot = this.props.mailboxFilter == 'sent ? '!' : ''; bangOrNot( this.currentUser.canActOnBehalfOf( m.senderID ) );
因为,有没有办法避免扩展的if/else语法和所有重复,通过选择是否return
用一声巨响来调用该行?
您可以通过其他方式简化它:
var response = this.currentUser.canActOnBehalfOf(m.senderID); return this.props.mailboxFilter == 'sent' ? response : !response;
通常,如果函数更改任何状态,则需要避免使用此方法.但是,因为在这种情况下你无论如何都在调用它,所以首先缓存它的值是没有害处的.
如果this.currentUser.canActOnBehalfOf( m.senderID )
allways返回一个布尔值,你可以做XOR.
return (this.props.mailboxFilter != 'sent') ^ this.currentUser.canActOnBehalfOf(m.senderID);
异或一个布尔值true
使得NOT.并且XOR with false
使缓冲区保持相同的值.
请注意,我更改==
为!=
.
并且,如果您打算实际使用它,请确保对代码的这一部分进行注释.一段时间后阅读此代码并不容易.
更新
正如Bergi建议的那样,最好使用布尔XOR !=
返回一个布尔值.
return (this.props.mailboxFilter != 'sent') != this.currentUser.canActOnBehalfOf(m.senderID);
当然,如果它也可以与布尔XNOR一起使用,只需在上面的代码中替换两个!=
s ==
.