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 index
untuk 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 var
pernyataan
Anda dapat menggunakan kemampuan var
pernyataan untuk mendefinisikan (dan menetapkan) variabel sementara kedua index
ketika 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 value
diinterpretasikan 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 value
digunakan 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 : y
ke idx == -1 ? y : x
:
var value = ( ( value = someArray.indexOf(3) ) == -1 ? 0 : value );
if
dan bukan yangif/else