2013-08-16 4 views
25

速記のための私はこれに似て/もしelse文の多くのいくつかのコードを持っている場合は、else文

var name = "true"; 

if (name == "true") { 
    var hasName = 'Y'; 
} else if (name == "false") { 
    var hasName = 'N'; 
}; 

しかし、これらの文を短くする方法は何ですか?名前はどちらかYesを持っているので? "true" : "false"ような何か...

+7

これは、JavaScriptのDOM操作ライブラリであるjQueryとは関係ありません。 –

+5

ブール値「true」ではなく、なぜ「true」という言葉を使用していますか? –

+1

可能な複製[簡略if/else文Javascript](http://stackoverflow.com/questions/9864634/shorthand-if-else-statement-javascript) –

答えて

72

ternary :? operator[spec]です。

var hasName = (name === 'true') ? 'Y' :'N'; 

三項演算子は、私たちは、あなたが希望通りのような速記if..else文を書くことができます。

それは次のようになります。

(name === 'true') - 結果の場合 - 条件が真

'N'に評価された場合、結果 - 私たちの条件

? - 三項演算子自体

'Y'条件が偽に評価される

だから、短くて(question)?(result if true):(result is false)のように、式の値を返すので、上の例のように変数に代入することができます。

+1

それは本当にうまくスケールされません、私の答えや@BenjaminGruenbaum答えを見て –

+0

なぜdownvoteが教えて? –

+0

いくつかの理由から、最初に、文字列リテラルに対して '' 'と' ''を混ぜていて、何らかの形で別のものを表現するという誤った概念を作り出しています。 ://stackoverflow.com/a/359509/1348195)また、インライン三項ブロックはif文より読みにくく(私は元のコードを好む)、多くの企業でコードレビューに合格しません。 。 –

4

var hasName = 'N'; 
if (name == "true") { 
    hasName = 'Y'; 
} 

のようにしてみたりしても

var hasName = (name == "true") ? "Y" : "N" ; 

ようternary operatorで試すには、単にあなたが

var hasName = (name) ? "Y" : "N" ; 

のように試すことができますまたはNoですが、私はそうではありませんそれと一緒にe。

18

あなたはマップとしてオブジェクトを使用することができます。

var hasName = ({ 
     "true" : "Y", 
     "false" : "N" 
    })[name]; 

また、これは多くのオプション

var hasName = ({ 
     "true"   : "Y", 
     "false"   : "N", 
     "fileNotFound" : "O" 
    })[name]; 

(参照を取得人々のためのボーナスポイント)

注意のためにうまくスケール:あなたは真偽値を示す変数に文字列値 "true"の代わりに実際のブール値を使用する必要があります。あなたのif-elseにちょうどtwo条件を持っている場合

+0

(もちろん、マップの名前は匿名である必要はありません。ほとんどの場合、読みやすさの点でさらに優れています。わかりにくい場合は、短いコードよりも読みやすいコードが重要です。われわれはすべて簡潔なコードを書いていますが、明快さを犠牲にするべきではありません。 –

+2

ニースのソリューション!それを考えなかっただろうか。しかし、私はindex-operatorを使用すると、マシンコードのif/elseif構文が同じになると思います。 – konqi

+0

@JoSoそれは実装に依存しますが、賢明な実行時にも同様に高速になります:)私は、この構造体をswitchの代わりに使用します。 –

13

試してみてください、ここでこの

hasName = name ? 'Y' : 'N'; 
3

ほとんどの答えが正常に動作します。あなたが何を望んでいるのかをもっと知るには、配列を使うでしょう。 names配列のすべての名前に対応する要素は、と全く同じインデックスを持つhasNames配列の要素を持ちます。それでは、これらの4つの行の問題です。

names = "true"; 
var names = ["true","false","1","2"]; 
var hasNames = ["Y","N","true","false"]; 
var intIndex = names.indexOf(name); 
hasName = hasNames[intIndex ]; 

このメソッドは、オブジェクトとプロパティーをillustrated by Benjaminとして使用して実装することもできます。