คำถามที่ตอบก่อนหน้านี้ที่นี่บอกว่านี่เป็นวิธีที่เร็วที่สุด:
//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
ในการเปรียบเทียบบนเบราว์เซอร์ของฉันฉันพบว่าช้ากว่านี้กว่า 3 เท่า:
var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
พวกเขาทั้งสองให้ผลผลิตเดียวกัน แต่ฉันคิดว่ามันยากที่จะเชื่อว่ารุ่นที่สองของฉันเป็นวิธีที่เร็วที่สุดโดยเฉพาะอย่างยิ่งเมื่อมีคนพูดอย่างอื่นที่นี่
นี่เป็นเรื่องแปลกในเบราว์เซอร์ของฉัน (Chromium 6) หรือไม่ หรือมีวิธีที่เร็วขึ้น?
แก้ไข: สำหรับทุกคนที่ใส่ใจฉันตัดสินต่อไปนี้ (ซึ่งดูเหมือนจะเร็วที่สุดในทุกเบราว์เซอร์ที่ฉันทดสอบ):
//nl is a NodeList
var l = []; // Will hold the array of Node's
for(var i = 0, ll = nl.length; i != ll; l.push(nl[i++]));
แก้ไข 2: ฉันพบวิธีที่เร็วยิ่งขึ้น
// nl is the nodelist
var arr = [];
for(var i = nl.length; i--; arr.unshift(nl[i]));
var i = nl.length, arr = new Array(i); for(; i--; arr[i] = nl[i]);
arr[arr.length] = nl[i];
อาจเร็วกว่าarr.push(nl[i]);
เนื่องจากจะหลีกเลี่ยงการเรียกใช้ฟังก์ชัน