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

เมธอด some() ใน JavaScript ใช้ทำอะไร?


บทนำ

Array.prototype.some() เป็นเมธอดของอาร์เรย์ ใช้ **ทดสอบว่ามีสมาชิกอย่างน้อย 1 ตัวที่ผ่านเงื่อนไขหรือไม่** คืนค่า true ทันทีที่พบสมาชิกที่ผ่านเงื่อนไข (Short-circuit) และคืน false หากไม่มีสมาชิกใดผ่านเลย

ไวยากรณ์ (Syntax)

array.some(callback(element[, index[, array]])[, thisArg])

ตัวอย่างโค้ด

<!DOCTYPE html>
<html>
<body>
  <script>
    // ตัวอย่าง: ตรวจสอบว่ามีผู้มีอายุครบ 18 ปีขึ้นไปในรายชื่อหรือไม่
    var voter_ages = [17, 15, 19, 16, 20];
    
    function isAdult(age) {
      return age >= 18;
    }
    
    var hasAdult = voter_ages.some(isAdult);
    document.write("มีผู้ใหญ่ในรายชื่อหรือไม่: " + hasAdult); // true
    
    // ใช้ Arrow Function (ES6)
    var hasTeen = voter_ages.some(age => age >= 13 && age <= 19);
    document.write("<br>มีวัยรุ่น (13-19) หรือไม่: " + hasTeen); // true
    
    // ตัวอย่างกับออบเจกต์
    var users = [
      {name: "Alice", active: false},
      {name: "Bob", active: false},
      {name: "Charlie", active: true}
    ];
    var hasActive = users.some(user => user.active);
    document.write("<br>มีผู้ใช้งาน Active หรือไม่: " + hasActive); // true
  </script>
</body>
</html>

พารามิเตอร์ของ Callback Function

พารามิเตอร์ คำอธิบาย จำเป็น
elementสมาชิกปัจจุบันที่กำลังประมวลผลใช่
indexดัชนีของสมาชิกปัจจุบันไม่
arrayอาร์เรย์ต้นฉบับที่เรียก some()ไม่

ความแตกต่างระหว่าง some() และ every()

เมธอด คืนค่า true เมื่อ คืนค่า false เมื่อ
some()มีสมาชิก อย่างน้อย 1 ตัว ผ่านเงื่อนไขไม่มีสมาชิกใดผ่านเลย
every()สมาชิก ทุกตัว ผ่านเงื่อนไขมีสมาชิก อย่างน้อย 1 ตัว ไม่ผ่าน

กรณีการใช้งานจริง

  • Validation: ตรวจสอบว่ามีข้อมูลผิดพลาดอย่างน้อย 1 ฟิลด์หรือไม่
  • Permission Check: ตรวจสอบว่าผู้ใช้มีสิทธิ์อย่างน้อย 1 อย่างที่ต้องการ
  • Feature Detection: ตรวจสอบว่าบราวเซอร์รองรับฟีเจอร์อย่างน้อย 1 ตัวในรายการ
  • Search/Filter: ตรวจสอบว่ามีรายการตรงตามเงื่อนไขหรือไม่ ก่อนทำการ filter จริง

ข้อควรระวัง

  • ไม่เปลี่ยนแปลงอาร์เรย์ต้นฉบับ (Immutable)
  • ไม่เรียก callback สำหรับช่องที่ถูกลบหรือไม่ได้กำหนดค่า (sparse arrays)
  • หยุดทำงานทันทีเมื่อพบ true (Performance ดีสำหรับอาร์เรย์ใหญ่)
  • คืนค่า false เสมอสำหรับอาร์เรย์ว่าง []