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 ... ..
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.
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.
Tenta isto
hasName = name ? 'Y' : 'N';
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.
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.