Код должен быть удобочитаемым, поэтому краткость не должна означать, что вы должны быть краткими независимо от стоимости - для этого вам следует сделать репост на https://codegolf.stackexchange.com/ - поэтому вместо этого я бы рекомендовал использовать вторую локальную переменную с именем, index
чтобы максимизировать понятность чтения ( с минимальными затратами времени выполнения тоже отмечу):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
Но если вы действительно хотите сократить это выражение, потому что вы жестокий садист по отношению к своим коллегам или сотрудникам проекта, то вот 4 подхода, которые вы можете использовать:
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 указал, что в использовании оператора-запятой (в предыдущем примере) нет необходимости, если присвоение to 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