Kod okunabilir olmalıdır, bu nedenle kısa ve öz olmak, maliyeti ne olursa olsun kısa olmak anlamına gelmemelidir - bunun için https://codegolf.stackexchange.com/ adresinde yeniden yayınlamalısınız - bunun yerine, index
okunabilirliği en üst düzeye çıkarmak için adlı ikinci bir yerel değişken kullanmanızı öneririm ( minimum çalışma süresi maliyetiyle de not ediyorum):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
Ancak bu ifadeyi gerçekten azaltmak istiyorsanız, çünkü iş arkadaşlarınız veya proje ortaklarınız için acımasız bir sadistsiniz, o zaman işte kullanabileceğiniz 4 yaklaşım:
1: a'daki geçici değişken var
ifadede
Sen kullanabilirsiniz var
ikinci geçici değişken tanımlamak (ve atama) için ifadenin yeteneğini index
virgülle ayrılmış:
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2: Kendi kendine çalışan anonim işlev
Diğer bir seçenek, kendi kendine çalışan anonim bir işlevdir:
// 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: Virgül operatörü
Ayrıca JavaScript'in desteklediği, C ve C ++ 'da da bulunan kötü şöhretli "virgül operatörü" vardır.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
Tek bir ifade gerektiren bir konuma birden çok ifade eklemek istediğinizde virgül operatörünü kullanabilirsiniz.
Bunu, bu durumda yeniden atayarak yan etkilere yol açmak için kullanabilirsiniz value
:
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
Bu işe yarar çünkü var value
önce (bir ifade olduğu gibi), ardından en soldaki, en içteki value
atama ve sonra virgül operatörünün sağ eli ve ardından üç terimli operatör - tümü yasal JavaScript olarak yorumlanır.
4: Bir alt ifadede yeniden atama
Yorumcu @IllusiveBrian, atama value
parantezli bir alt ifade olarak kullanılıyorsa , virgül operatörünün (önceki örnekte) kullanılmasının gereksiz olduğuna dikkat çekti :
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
Not mantıksal ifadelerde negatif kullanımı zor insanlar takip etmek için olabilir - Yukarıdaki örneklerin tümünde değiştirerek okumak için basitleştirilmiş böylece idx !== -1 ? x : y
için idx == -1 ? y : x
:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
and not anif/else