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

การรวม (Merge/Join) สองอาร์เรย์ใน JavaScript

มีหลายวิธีในการรวมอาร์เรย์ 2 ตัวใน JavaScript แต่ละวิธีมีข้อได้เสียต่างกันเรื่อง Performance, Mutability และ Browser Support

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

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Merge Arrays</title>
  <style>
    body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
    .result, .sample { font-size: 18px; font-weight: 500; color: rebeccapurple; }
    .result { color: red; }
  </style>
</head>
<body>
  <h1>รวมสองอาร์เรย์ใน JavaScript</h1>
  <div class="sample"></div>
  <div class="result"></div>
  <button class="Btn">คลิกที่นี่</button>
  <h3>คลิกปุ่มด้านบนเพื่อรวมสองอาร์เรย์ข้างต้นเข้าด้วยกัน</h3>
  <script>
    const BtnEle = document.querySelector(".Btn");
    const resEle = document.querySelector(".result");
    const sampleEle = document.querySelector(".sample");
    
    const arr = [1, 2, 3, 4];
    const arr1 = ["A", "B", "C", "D"];
    
    sampleEle.innerHTML = "arr = " + arr + "  arr1 = " + arr1;
    
    // concat - ไม่ Mutate, คืน Array ใหม่
    const mergedArr = arr.concat(arr1);
    
    BtnEle.addEventListener("click", () => {
      resEle.innerHTML = "Merged array = " + mergedArr;
    });
  </script>
</body>
</html>

วิธีการรวม Array ทั้งหมด

วิธีCodeMutates?Performanceรองรับ
concatarr1.concat(arr2)❌ ไม่ดีทุก Browser
Spread[...arr1, ...arr2]❌ ไม่ดี (ES6+)Modern
push + spreadarr1.push(...arr2)✅ ใช่ (arr1)ดีES6+
forEach + pusharr2.forEach(x => arr1.push(x))✅ ใช่ (arr1)ช้ากว่าทุก Browser
flat[arr1, arr2].flat()❌ ไม่ดีES2019+

รวมหลาย Array

const a = [1, 2];
const b = [3, 4];
const c = [5, 6];

// concat
const merged1 = a.concat(b, c); // [1,2,3,4,5,6]

// Spread
const merged2 = [...a, ...b, ...c]; // [1,2,3,4,5,6]

// flat (สำหรับ Array of Arrays)
const merged3 = [a, b, c].flat(); // [1,2,3,4,5,6]

⚠️ ข้อควรระวัง

  • push(...arr) มีข้อจำกัด Maximum Call Stack Size (~65k elements)
  • Spread Operator ก็มีข้อจำกัด Argument Length เหมือนกัน
  • Array ขนาดใหญ่มาก ควรใช้ concat หรือ Loop แบบ Chunk

ผลลัพธ์

Merged array = 1,2,3,4,A,B,C,D