Kod powinien być czytelny, więc bycie zwięzłym nie powinno oznaczać zwięzłości bez względu na koszty - w tym celu prześlij ponownie na https://codegolf.stackexchange.com/ - więc zamiast tego zalecałbym użycie drugiej zmiennej lokalnej o nazwie, index
aby zmaksymalizować czytelność tekstu ( przy minimalnych kosztach czasu działania, zauważam):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
Ale jeśli naprawdę chcesz uciąć to wyrażenie, ponieważ jesteś okrutnym sadystą dla swoich współpracowników lub współpracowników projektu, oto 4 podejścia, których możesz użyć:
1: Zmienna tymczasowa w var
instrukcji
Możesz użyć var
zdolności instrukcji do zdefiniowania (i przypisania) drugiej zmiennej tymczasowej index
, oddzielonej przecinkami:
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2: Samowykonująca się funkcja anonimowa
Inną opcją jest samowykonująca się anonimowa funkcja:
// 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: Operator przecinka
Istnieje również niesławny „operator przecinka” obsługiwany przez JavaScript, który jest również obecny w C i C ++.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
Możesz użyć operatora przecinka, jeśli chcesz dołączyć wiele wyrażeń w lokalizacji, która wymaga jednego wyrażenia.
Możesz go użyć do wprowadzenia efektów ubocznych, w tym przypadku ponownie przypisując do value
:
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
To działa, ponieważ var value
jest najpierw interpretowane (ponieważ jest to instrukcja), a następnievalue
przypisanie skrajne lewe, najbardziej wewnętrzne , a następnie prawa ręka operatora przecinka, a następnie operator trójskładnikowy - cały legalny JavaScript.
4: Przypisz ponownie w podwyrażeniu
Komentator @IllusiveBrian zwrócił uwagę, że użycie operatora przecinka (w poprzednim przykładzie) jest niepotrzebne, jeśli przypisanie do value
jest używane jako podwyrażenie w nawiasach:
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
Zauważ, że używanie negatywów w wyrażeniach logicznych może być trudniejsze do naśladowania dla ludzi - dlatego wszystkie powyższe przykłady można uprościć do czytania, zmieniając idx !== -1 ? x : y
na idx == -1 ? y : x
:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
i nieif/else