Thursday 22 November 2012

เทคนิคการ Remove Item ออกจาก Array ใน JavaScript

สมมุติว่าเราประกาศ Array ไว้ดังต่อไปนี้

var myArray = ['a','b','c','d','e'];

แล้วเราต้องการลบ item ตัวที่ 1 (index เท่ากับ 0) ออกจาก myArray ด้วยการใช้คำสั่ง delete ดังต่อไปนี้

delete myArray[0];

สิ่งที่เกิดขึ้นก็คือ JavaScript จะไม่ได้ทำการลบ item นั้นออกจาก Array จริงๆ แต่เป็นการไปแทนที่ข้อมูลในตำแหน่งนั้นๆด้วย undefined ซึ่งถ้าเรา debug ดูใน Firebug เราจะเห็นว่าข้อมูลใน myArray เป็นดังต่อไปนี้

[undefined,'b','c','d','e'];

ซึ่งไม่เป็นไปอย่างที่เราต้องการ แต่มีวิธีแก้ครับ โดยนำ Script ที่เขียนไว้โดย John Resig ซึ่งเขียนเพิ่มคำสั่ง remove เข้าไปใน Array  มาใช้งานดังนี้ครับ

// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
  var rest = this.slice((to || from) + 1 || this.length);
  this.length = from < 0 ? this.length + from : from;
  return this.push.apply(this, rest);
};

ตอนนี้ หากเราอยากลบ item ที่ 1 เราก็เพียงใช้คำสั่ง

myArray.remove(0);  // item ที่ 1 จะมีค่า index = 0

หรือหากอยากจะลบ item ลำดับที่ 2 จากตำแหน่งท้ายสุดของ Array ก็สามารถทำได้ดังนี้

myArray.remove(-2);

หรือหากอยากจะลบหลายๆ item พร้อมๆ กัน ก็สามารถทำได้ โดยการส่งค่า index ที่ต้องการลบเข้าไป ดังนี้

myArray.remove(1,3); // จะเป็นการลบ item ในตำแหน่งที่ 2 และ 4 ตามลำดับ

แหล่งที่มา : http://stackoverflow.com/questions/500606/javascript-array-delete-elements


No comments:

Post a Comment