Код повинен бути читабельним, тому бути лаконічним не повинно означати терміновості незалежно від вартості - для цього вам слід перезавантажити сторінку https://codegolf.stackexchange.com/ - тому замість цього я рекомендував би використовувати другу локальну змінну, названу index
для максимальної зрозумілості читання ( з мінімальними витратами на виконання, зауважую):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
Але якщо ви дійсно хочете скоротити цей вираз, оскільки ви жорстокий садист зі своїми колегами чи співробітниками проектів, то ось чотири підходи, які ви можете використати:
1: Тимчасова змінна у var
заяві
Ви можете використовувати var
здатність оператора визначати (і призначати) другу тимчасову змінну index
при розділенні комами:
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2: Самовиконання анонімної функції
Інший варіант - самовиконання анонімної функції:
// 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: Командний оператор
Є також сумнозвісний "оператор комами", який підтримує JavaScript, який також присутній в C і C ++.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
Ви можете використовувати оператор комами, коли потрібно включити декілька виразів у місцеположення, яке вимагає одного виразу.
Ви можете використовувати його для введення побічних ефектів, в цьому випадку переназначивши value
:
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
Це працює тому var value
, що інтерпретується спочатку (як це висловлювання), а потім ліворуч - найбільше, внутрішнє - найбільшеvalue
призначення, а потім праворуч оператора комами, а потім потрійного оператора - все законний JavaScript.
4: Повторне призначення в умовах підвираження
Коментатор @IllusiveBrian зазначив, що використання кома-оператора (у попередньому прикладі) є зайвим, якщо призначення призначене для value
використання в скобках під дужкою:
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
Зауважте, що використання негативів у логічних виразах може бути складнішим для людей - тому всі перераховані вище приклади можна спростити для читання, змінивши idx !== -1 ? x : y
на idx == -1 ? y : x
:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
а не anif/else