Kode harus dapat dibaca, jadi singkat tidak berarti menjadi singkat berapa pun biayanya - untuk itu Anda harus memposting ulang ke https://codegolf.stackexchange.com/ - jadi saya akan merekomendasikan menggunakan variabel lokal kedua yang diberi nama indexuntuk memaksimalkan pemahaman bacaan ( dengan biaya runtime minimal juga, saya perhatikan):
var index = someArray.indexOf( 3 );
var value = index == -1 ? 0 : index;
Tetapi jika Anda benar-benar ingin mengurangi ungkapan ini, karena Anda kejam dan sadis bagi rekan kerja atau kolaborator proyek Anda, berikut adalah 4 pendekatan yang dapat Anda gunakan:
1: Variabel sementara dalam sebuah varpernyataan
Anda dapat menggunakan kemampuan varpernyataan untuk mendefinisikan (dan menetapkan) variabel sementara kedua indexketika dipisahkan dengan koma:
var index = someArray.indexOf(3), value = index !== -1 ? index: 0;
2: Fungsi anonim yang dijalankan sendiri
Opsi lainnya adalah fungsi anonim yang dijalankan sendiri:
// 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 koma
Ada juga "operator koma" terkenal yang didukung JavaScript, yang juga ada dalam C dan C ++.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
Anda dapat menggunakan operator koma saat Anda ingin menyertakan beberapa ekspresi di lokasi yang membutuhkan ekspresi tunggal.
Anda dapat menggunakannya untuk menimbulkan efek samping, dalam hal ini dengan menetapkan kembali ke value:
var value = ( value = someArray.indexOf(3), value !== -1 ? value : 0 );
Ini berfungsi karena var valuediinterpretasikan terlebih dahulu (sebagai pernyataan), laluvalue penugasan paling kiri, paling dalam , dan kemudian operator koma sebelah kanan, lalu operator terner - semua JavaScript legal.
4: Tetapkan ulang dalam subekspresi
Komentator @IllusiveBrian menunjukkan bahwa penggunaan operator koma (dalam contoh sebelumnya) tidak diperlukan jika penugasan ke valuedigunakan sebagai subekspresi dalam tanda kurung:
var value = ( ( value = someArray.indexOf(3) ) !== -1 ? value : 0 );
Perhatikan bahwa penggunaan negatif dalam ekspresi logika bisa lebih sulit diikuti oleh manusia - jadi semua contoh di atas dapat disederhanakan untuk dibaca dengan mengubah idx !== -1 ? x : yke idx == -1 ? y : x:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
ifdan bukan yangif/else