Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีหยุดการทำงานของฟังก์ชัน _.each ใน Underscore.js

คุณไม่สามารถใช้ break เพื่อออกจากเมธอด each ได้ เนื่องจากมันเลียนแบบพฤติกรรมของ forEach แบบเนทีฟซึ่งไม่มีกลไกให้หลุดพ้นจากลูป (นอกจากการโยนข้อยกเว้น)

ทางเลือกที่ใช้แทนได้

1. ใช้ _.find

เมธอด _.find จะหยุดลูปทันทีเมื่อพบเงื่อนไขที่ต้องการ ตัวอย่างเช่น:

_.find([1, 2, 3, 4], (element) => {
  // ตรวจสอบเงื่อนไขที่นี่
  if (element === 2) {
    return true;
  }
  // ทำงานกับ element ที่นี่
  // ...
});

2. โยนข้อยกเว้น (Throw Exception)

สามารถโยนข้อยกเว้นจากภายใน each เพื่อออกจากลูปได้ ตัวอย่างเช่น:

try {
  _([1, 2, 3, 4]).each((element) => {
    // ตรวจสอบเงื่อนไขที่นี่
    if (element === 2) {
      throw new Error();
    }
    // ทำงานกับ element ที่นี่
    // ...
  })
} catch (e) {
  // ไม่ต้องทำอะไร แค่จับข้อยกเว้นเพื่อหยุดลูป
}

หมายเหตุ: วิธีการโยนข้อยกเว้นถือเป็น "การใช้งานผิดวัตถุประสงค์" (abuse) ของกลไกข้อยกเว้น ควรพิจารณาใช้ _.find, _.some, หรือลูป for...of แบบมาตรฐานแทนเพื่อความอ่านง่ายและประสิทธิภาพที่ดีกว่า