O código deve ser legível, portanto, ser sucinto não deve significar ser conciso custe o que custar - para isso, você deve reenviar para https://codegolf.stackexchange.com/ - então, em vez disso, eu recomendaria usar uma segunda variável local chamada index
para maximizar a compreensão de leitura ( com custo mínimo de tempo de execução também, eu observo):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
Mas se você realmente deseja reduzir essa expressão, porque você é um sádico cruel com seus colegas de trabalho ou colaboradores do projeto, então aqui estão 4 abordagens que você pode usar:
1: Variável temporária em uma var
declaração
Você pode usar a var
capacidade da instrução para definir (e atribuir) uma segunda variável temporária index
quando separada por vírgulas:
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2: Função anônima autoexecutável
Outra opção é uma função anônima autoexecutável:
// 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: operador vírgula
Há também o infame "operador de vírgula" que o JavaScript suporta, que também está presente em C e C ++.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
Você pode usar o operador vírgula quando quiser incluir várias expressões em um local que requer uma única expressão.
Você pode usá-lo para introduzir efeitos colaterais, neste caso, reatribuindo a value
:
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
Isso funciona porque var value
é interpretado primeiro (como se fosse uma instrução) e, em seguida , a value
atribuição mais à esquerda, mais interna , e então à direita do operador vírgula e, em seguida, o operador ternário - todo JavaScript válido.
4: Reatribuir em uma subexpressão
O comentador @IllusiveBrian apontou que o uso do operador vírgula (no exemplo anterior) é desnecessário se a atribuição a value
for usada como uma subexpressão entre parênteses:
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
Observe que o uso de negativos em expressões lógicas pode ser mais difícil para humanos seguirem - portanto, todos os exemplos acima podem ser simplificados para leitura mudando idx !== -1 ? x : y
para idx == -1 ? y : x
:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
e não umif/else