บทนำ
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 เสมอสำหรับอาร์เรย์ว่าง []