コードは、読取り可能である必要がありますので、という簡潔べきコストは何でもない平均ビーイングの簡潔な-あなたに再投稿する必要があり、そのためにhttps://codegolf.stackexchange.com/ -その代わりに、私は名前の第二のローカル変数を使用することをお勧めしますindex
(読みわかりやすさを最大化するために、実行時のコストも最小限に抑えられます。
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
しかし、同僚やプロジェクトの協力者にとって残酷なサディストであるため、この表現を削減したい場合は、次の4つの方法を使用できます。
1:var
ステートメント内の一時変数
var
ステートメントの機能を使用して、index
コンマで区切られたときに2番目の一時変数を定義(および割り当て)できます。
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2:自己実行匿名関数
別のオプションは、自己実行の無名関数です。
// Traditional syntax:
var value = function( x ) { return x !== -1 ? x : 0 }( someArray.indexOf(3) );
// ES6 syntax:
var value = ( x => x !== -1 ? x : 0 )( someArray.indexOf(3) );
3:カンマ演算子
JavaScriptがサポートする悪名高い「カンマ演算子」もあり、これはCおよびC ++にも存在します。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
単一の式を必要とする場所に複数の式を含める場合は、カンマ演算子を使用できます。
これを使用して副作用を導入できます。この場合は、に再割り当てしvalue
ます。
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
これが機能するのvar value
は、最初に解釈されるため(ステートメントであるため)、次に左端、最も内側のvalue
代入、次にコンマ演算子の右側、次に三項演算子-すべての正当なJavaScriptです。
4:部分式で再割り当て
解説者@IllusiveBrianは、への割り当てがvalue
括弧で囲まれた部分式として使用されている場合、コンマ演算子(前の例)の使用は不要であることを指摘しました。
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
論理式での否定の使用は、人間にとって理解しにくい場合があることに注意してください。上記の例はすべて、次のように変更idx !== -1 ? x : y
することで読みやすくすることができますidx == -1 ? y : x
。
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
なくif/else