Abreviatura da declaração de "se-else"

tenho um código com muitas declarações de se / else semelhantes a esta:

var name = "true";

if (name == "true") {
    var hasName = 'Y';
} else if (name == "false") {
    var hasName = 'N';
};
Mas há alguma maneira de tornar estas declarações mais curtas? Algo como ... ..

Author: cookie monster, 2013-08-16

5 answers

Usando o ternário :? operador [spec].

var hasName = (name === 'true') ? 'Y' :'N';
O operador ternário deixa-nos escrever declarações estenográficas exactamente como tu queres.

Parece:

(name === 'true') - a nossa condição

? - o próprio operador ternário

'Y' - o resultado se a condição for considerada verdadeira

'N' - o resultado se a condição for avaliada como falsa

Em resumo (question)?(result if true):(result is false), como podes ver - volta o valor da expressão para que possamos simplesmente atribuí-la a uma variável tal como no exemplo acima.

 79
Author: Tushar Gupta, 2013-08-16 15:23:26

Pode usar um objecto como um mapa:

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

Isto também balança bem para muitas opções

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

(Ponto de bónus para as pessoas que recebem a referência)

Nota: deve usar os booleanos actuais em vez do valor de cadeia "true" para as suas variáveis que indicam os valores de verdade.

 18
Author: Benjamin Gruenbaum, 2013-08-16 08:48:51

Tenta isto

hasName = name ? 'Y' : 'N';
 13
Author: Eswara Reddy, 2013-08-16 08:49:13

Tenta tipo

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

Ou mesmo tentar com ternary operator Tipo

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

Mesmo simplesmente você pode tentar como

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

Desde que o nome tem Yes ou No mas não tenho a certeza com ele.

 4
Author: Gautam3164, 2013-08-16 08:46:26

A maioria das respostas aqui funcionará bem se tiver apenas two condições no seu caso if-else. Para mais, acho que o que queres, vais usar arrays. Cada elemento correspondente de nomes na lista names terá um elemento na lista hasNames com o o mesmo índice. Então é uma questão destas quatro linhas.

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

Este método também pode ser implementado usando Objetos e propriedades como ilustrado por Benjamin.

 3
Author: Abijeet Patro, 2017-05-23 11:54:47