ความแตกต่างระหว่าง splice() กับ slice() ในการจัดการ Array ใน JavaScript

Array.splice() และ Array.slice() ทั้งคู่เป็นเมธอดใน JavaScript ที่ชื่อคล้ายกัน แต่ทำหน้าที่ต่างกัน  โดยสามารถเปรียบเทียบแบบเห็นภาพง่ายๆ ได้ดังนี้

1. Array.splice() – เป็นการตัดแปะ: ลบ/แทรก/แทนที่ ค่าภายในอาร์เรย์เดิม

• ใช้เพื่อ: ลบ หรือ เพิ่มค่าเข้าไปในอาร์เรย์ ณ ตำแหน่งที่ระบุ
• ผลลัพธ์: คืนค่าที่ถูกลบออก และเปลี่ยนอาร์เรย์ต้นฉบับ

array.splice(start, deleteCount, item1, item2, …)

คำอธิบาย

start: ตำแหน่งที่จะเริ่มลบ
deleteCount คือ “จำนวนสมาชิกที่ต้องการลบ” เริ่มจากตำแหน่ง start แต่ถ้า deleteCount = 0 → ไม่ลบ แต่สามารถ “แทรก” ค่าได้
item1, item2, … คือ สมาชิกใหม่ ที่ต้องการเพิ่มเข้าไปใน Array ณ ตำแหน่ง start ที่ระบุไว้ ถ้ามีมากกว่าหนึ่งสมาชิก จะเพิ่มเข้ามาทั้งหมดในตำแหน่งที่กำหนด หลังจากการลบสมาชิกตาม start และ deleteCount ที่กำหนด

ตัวอย่าง

1.1. ลบสมาชิกในอาร์เรย์

let fruits = [“apple”, “banana”, “orange”];
fruits.splice(1, 1, “grape”);

// ลบ “banana” ที่ index 1 แล้วใส่ “grape” แทน
// ผลลัพธ์ คือ fruits = [“apple”, “grape”, “orange”]

let arr = [“a”, “b”, “c”, “d”];
arr.splice(1, 2);

// เริ่มที่ index 1 (“b”) แล้วลบ 2 ตัว (“b” และ “c”)
// ผลลัพธ์ คือ  arr = [“a”, “d”]

1.2. ไม่ลบ แต่แทรกเข้าไป

let arr = [“a”, “b”, “c”];
arr.splice(1, 0, “x”);

// เริ่มที่ index 1, ไม่ลบเลย (deleteCount = 0), แทรก “x”
// ผลลัพธ์คือ arr มีค่าเป็น [“a”, “x”, “b”, “c”]

1.3. ลบและแทรกพร้อมกัน

let arr = [“a”, “b”, “c”];
arr.splice(1, 1, “x”, “y”);

// ลบ 1 ตัวที่ index 1 (“b”) แล้วแทรก “x” และ “y”
// ผลลัพธ์คือ arr มีค่าเป็น [“a”, “x”, “y”, “c”]

2. Array.slice() – เป็นการแยกสำเนา ดึงบางส่วนออกมา โดยไม่กระทบอาร์เรย์เดิม

  • ใช้เพื่อ: คัดลอกบางส่วนของอาร์เรย์ โดยไม่กระทบอาร์เรย์เดิม
  • ผลลัพธ์: คืนอาร์เรย์ใหม่

array.slice(start, end)

คำอธิบาย 

start: ตำแหน่งเริ่มต้น (รวมตำแหน่งนี้ด้วย)
end: ตำแหน่งสุดท้าย (ไม่รวมตำแหน่งนี้)

ตัวอย่าง

let fruits = [“apple”, “banana”, “orange”];
let newFruits = fruits.slice(1, 2);

// ผลลัพธ์ คือ newFruits = [“banana”]
// fruits = [“apple”, “banana”, “orange”]; ยังคงเหมือนเดิม

สรุปเนื้อหา

splice = “แทรกหรือลบ” → เปลี่ยนของเดิม

slice = “ตัดบางส่วนออก” → ไม่กระทบของเดิม

ผู้เขียน

Sinnapa Prasith-Rathsint
sinnapa@g.swu.ac.th