รหัสควรอ่านได้ดังนั้นการกระชับไม่ควรหมายถึงการลดต้นทุนไม่ว่าจะด้วยต้นทุนใดก็ตามเพราะคุณควรโพสต์ใหม่ไปที่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 ชี้ให้เห็นว่าการใช้ตัวดำเนินการลูกน้ำ (ในตัวอย่างก่อนหน้านี้) ไม่จำเป็นหากใช้การกำหนดให้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
และไม่ใช่if/else