เมธอด some() ใช้สำหรับ ตรวจสอบว่ามีองค์ประกอบอย่างน้อย 1 ตัว ในอาร์เรย์ที่ทำให้ฟังก์ชันทดสอบ (callback) คืนค่า true หยุดทำงานทันทีเมื่อพบ (short-circuit)
ไวยากรณ์ (Syntax)
array.some(callback(element[, index[, array]])[, thisArg])
ตัวอย่างการใช้งาน
ตัวอย่างที่ 1: ตรวจสอบว่ามีคะแนนมากกว่า 400 หรือไม่
<!DOCTYPE html>
<html>
<body>
<h2>คะแนนอันดับ</h2>
<p>มีคะแนนมากกว่า 400 หรือไม่?</p>
<button onclick="display()">ตรวจสอบ</button>
<p id="demo"></p>
<script>
const pointsArr = [50, 100, 200, 300, 400, 500, 600];
function pointsFunc(points) {
return points > 400;
}
function display() {
const result = pointsArr.some(pointsFunc);
document.getElementById("demo").innerHTML = "มีคะแนน > 400: " + result;
// ผลลัพธ์: true (เพราะมี 500, 600)
}
</script>
</body>
</html>
ตัวอย่างที่ 2: ตรวจสอบค่าที่ไม่มีในอาร์เรย์
<!DOCTYPE html>
<html>
<body>
<h2>คะแนนอันดับ</h2>
<p>มีคะแนนเท่ากับ 550 หรือไม่?</p>
<button onclick="display()">ตรวจสอบ</button>
<p id="demo"></p>
<script>
const pointsArr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 1000];
function pointsFunc(points) {
return points == 550;
}
function display() {
const result = pointsArr.some(pointsFunc);
document.getElementById("demo").innerHTML = "มีคะแนน 550: " + result;
// ผลลัพธ์: false
}
</script>
</body>
</html>
คุณสมบัติสำคัญ
- ✅ Short-circuit - หยุดวนลูปทันทีเมื่อพบ
true(ประหยัดประสิทธิภาพ) - ✅ ไม่เปลี่ยนแปลงอาร์เรย์ต้นฉบับ
- ✅ รองรับ
NaN(ต่างจากindexOf) - ❌ ไม่รองรับ
fromIndex(เริ่มค้นหาตลอดอาร์เรย์เสมอ) - อาร์เรย์ว่าง:
[].some(fn)→falseเสมอ
เปรียบเทียบ some() vs every() vs includes() vs find()
| เมธอด | คืนค่า | เงื่อนไข | หยุดเมื่อ | ใช้เมื่อ |
|---|---|---|---|---|
some() | Boolean | มี อย่างน้อย 1 ตัวผ่าน | พบ true | OR logic |
every() | Boolean | ทุกตัว ผ่าน | พบ false | AND logic |
includes() | Boolean | มีค่า ตรงกัน (strict equality) | พบค่า | ค้นหาค่าที่แน่นอน |
find() | Element/undefined | มี อย่างน้อย 1 ตัวผ่าน | พบ true | ต้องการค่าตัวนั้น |
กรณีใช้งานจริง
1. ตรวจสอบสิทธิ์/เงื่อนไข
const users = [
{name: 'Alice', role: 'user'},
{name: 'Bob', role: 'admin'},
{name: 'Charlie', role: 'user'}
];
// มี admin หรือไม่?
const hasAdmin = users.some(u => u.role === 'admin'); // true
// ทุกคนเป็น admin หรือไม่?
const allAdmin = users.every(u => u.role === 'admin'); // false
2. Validation
const formFields = [
{name: 'email', value: 'test@test.com', valid: true},
{name: 'password', value: '123', valid: false}, // สั้นเกินไป
{name: 'age', value: '25', valid: true}
];
const hasErrors = formFields.some(field => !field.valid); // true
const isValid = formFields.every(field => field.valid); // false
3. ตรวจสอบ duplicate
const ids = [1, 2, 3, 4, 2]; const hasDuplicate = ids.some((id, index) => ids.indexOf(id) !== index); // true