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

คำนวณค่ามัธยฐาน (Median) ของอาร์เรย์ใน JavaScript


ค่ามัธยฐาน (Median) คือค่ากึ่งกลางของชุดข้อมูลที่เรียงลำดับแล้ว หากจำนวนข้อมูลเป็นคี่ คือค่าตรงกลาง หากเป็นคู่ คือค่าเฉลี่ยของค่ากึ่งกลาง 2 ค่า

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

<!DOCTYPE html>
<html lang="th">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>คำนวณค่ามัธยฐาน</title>
  <style>
    body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
    .result, .sample { font-size: 18px; font-weight: 500; color: blueviolet; }
    .sample { color: red; }
  </style>
</head>
<body>
  <h1>คำนวณค่ามัธยฐานของอาร์เรย์</h1>
  <div><pre class="sample"></pre></div>
  <div class="result"></div>
  <button class="Btn">คำนวณ</button>
  <h3>กดปุ่มเพื่อคำนวณค่ามัธยฐานของอาร์เรย์ด้านบน</h3>
  <script>
    const resEle = document.querySelector(".result");
    const btnEle = document.querySelector(".Btn");
    const sampleEle = document.querySelector(".sample");
    const arr = [1, 5, 6, 99, 12, 11, 22];
    sampleEle.innerHTML = "[" + arr.join(", ") + "]";
    btnEle.addEventListener("click", () => {
      // คัดลอกและเรียงลำดับ (ไม่แก้ไขอาร์เรย์เดิม)
      const sorted = [...arr].sort((a, b) => a - b);
      const mid = Math.floor(sorted.length / 2);
      let median;
      if (sorted.length % 2 !== 0) {
        // จำนวนคี่: ค่าตรงกลาง
        median = sorted[mid];
      } else {
        // จำนวนคู่: ค่าเฉลี่ยของ 2 ค่ากลาง
        median = (sorted[mid - 1] + sorted[mid]) / 2;
      }
      resEle.innerHTML = "ค่ามัธยฐาน = " + median;
    });
  </script>
</body>
</html>

ผลลัพธ์

คำนวณค่ามัธยฐาน (Median) ของอาร์เรย์ใน JavaScript

เมื่อกดปุ่ม "คำนวณ":

คำนวณค่ามัธยฐาน (Median) ของอาร์เรย์ใน JavaScript

ฟังก์ชันสำเร็จรูป (Reusable)

function median(arr) {
  if (!arr.length) return NaN;
  const sorted = [...arr].sort((a, b) => a - b);
  const mid = Math.floor(sorted.length / 2);
  return sorted.length % 2 !== 0
    ? sorted[mid]
    : (sorted[mid - 1] + sorted[mid]) / 2;
}

// ใช้งาน
console.log(median([1, 5, 6, 99, 12, 11, 22])); // 11
console.log(median([1, 2, 3, 4])); // 2.5

โน้ตเพิ่มเติม

  • sort((a, b) => a - b) จำเป็นสำหรับตัวเลข เพราะ sort() เริ่มต้นเรียงแบบสตริง (เช่น "10" < "2")
  • ใช้ [...arr] คัดลอกอาร์เรย์ก่อนเรียง เพื่อไม่เปลี่ยนข้อมูลต้นฉบับ (immutable approach)
  • สำหรับข้อมูลใหญ่ ควรใช้ Quickselect algorithm (O(n)) แทนการเรียงทั้งหมด (O(n log n))