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

เมธอด Array.some() ใน JavaScript: ตรวจสอบว่ามีองค์ประกอบใดผ่านเงื่อนไขหรือไม่

เมธอด 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 ตัวผ่านพบ trueOR logic
every()Booleanทุกตัว ผ่านพบ falseAND 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