web-dev-qa-db-ja.com

if-elseステートメントの省略形

次のようなif/elseステートメントがたくさんあるコードがあります。

var name = "true";

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

しかし、これらのステートメントを短くする方法はありますか?何かのようなもの ? "true" : "false" ...

30
Meek

三元:?演算子 [spec]

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

三項演算子を使用すると、簡単なif..elseステートメントはまさにあなたが望むものです。

次のようになります。

(name === 'true')-条件

?-三項演算子自体

'Y'-条件がtrueと評価された場合の結果

'N'-条件がfalseと評価された場合の結果

要するに(question)?(result if true):(result is false)、ご覧のように-式の値を返すので、上の例のように変数に単純に代入できます。

オブジェクトをマップとして使用できます:

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

また、これは多くのオプションにうまく対応します

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

(参照を取得する人々に対するボーナスポイント)

注:真理値を示す変数には、文字列値「true」の代わりに実際のブール値を使用する必要があります。

18

これを試して

hasName = name ? 'Y' : 'N';
14
Eswara Reddy

のように試してください

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

または、ternary operator 好む

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

単純にでも試してみることができます

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

名前にはYesまたはNoがありますが、iamにはそれが不明です。

4
Gautam3164

If-elseにtwo条件のみが含まれている場合、ここでのほとんどの回答は正常に機能します。あなたが望むものの多くは、配列を使用することになります。 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 ];

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

3
Abijeet Patro