2015-12-15 4 views
7

この言葉の使い方はよく分かりません(前回の回答は見つからないかもしれませんが)。しかし、私はコードのようにこの:条件付きでa!を適用します。 JavaScript内のメソッドへ

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)); 

ようで、延長の場合/他の構文とすべての繰り返しを避けるための方法ですがreturn回線にコールを発信するかどうかを選択することで、

+1

解決策は、ロジックの別の場所にある可能性があります。あなたは本当に権限の逆を送信したいですか?それは奇妙に思える。 – isherwood

答えて

9

あなたは他の方法でそれを簡略化することができます:一般的に

var response = this.currentUser.canActOnBehalfOf(m.senderID); 
return this.props.mailboxFilter == 'sent' ? response : !response; 

、あなたの関数がどのような状態を変更する場合は、この方法を避けたいでしょう。しかし、この場合、あなたはそれを無関係に呼び出すので、最初にその値をキャッシュすることに害はありません。

-4

JavaScriptを使用していると仮定すると、evalメソッドを使用して、JavaScriptコードの文字列を評価できます。文字列の先頭に条件付きで条件付きで適用し、evalの結果を返すことができます。

+1

しないでください... – Lucas

+0

どうしてですか?これはあなたに挑戦するものではありません。私は真剣に興味があります。 –

+0

Eval is Evil ... –

5

this.currentUser.canActOnBehalfOf(m.senderID)が常にブール値を返す場合は、XORを実行できます。 true

return (this.props.mailboxFilter != 'sent')^this.currentUser.canActOnBehalfOf(m.senderID); 

XORブール値は、NOTになります。また、XORをfalseとすると、同じ値を保持するバッファが作成されます。

==!=に変更しました。

実際に使用する場合は、コードのこの部分にコメントを付けるようにしてください。しばらくしてからこのコードを読むのは簡単ではありません。

更新

Bergiが示唆したように、ブール値を返すために、ブールXOR !=を使用することをお勧めします。

return (this.props.mailboxFilter != 'sent') != this.currentUser.canActOnBehalfOf(m.senderID); 

そしてもちろん、それは同様ブールXNORで使用することができるならば、ちょうど上記のコードで==の両方!= Sを交換してください。

return this.currentUser.canActOnBehalfOf(m.senderID) == (this.props.mailboxFilter == 'sent'); 
+1

これが最も効率的な方法です。 – TbWill4321

+0

私はこれが好きです...しかしあなたの将来の自己はしません! – Xophmeister

+0

@Xophmeisterもちろん: 彼の雇用のセキュリティを最大にするためにこれを使うことができます!誰もこのコードを読むことはできません! –

3

現在地ブールXNOR演算子を使用します。私は、OPがファンクションコールの結果の前にbang(!)を適用したいという良い理由があると仮定しています。私の答えは、OPの質問に対する技術的な解決策です。

function bang(r) { 
    return !r; 
} 
function notBang(r) { 
    return r; 
} 
function canActOnBehalf() { 
    return true; 
} 
var filter = 'notsent'; 
var f = (filter == 'sent' ? bang : notBang); 
f(canActOnBehalf('whatever')); 
0

はなぜか、なぜそのようなことをしないに関する多くの良いコメントがあります。また、等価として知られている -

関連する問題