ด้วยวิธีการของวัตถุแบบ Array คุณสามารถปรับเปลี่ยนเนื้อหาแบบ Array ได้ แต่เมื่อเปรียบเทียบกับแบบพื้นฐานสำหรับลูปวิธีการเหล่านี้ขาดฟังก์ชั่นที่สำคัญอย่างหนึ่ง คุณไม่สามารถแก้ไขดัชนีในการรันได้
ตัวอย่างเช่นถ้าคุณจะลบองค์ประกอบปัจจุบันและวางไปยังตำแหน่งดัชนีอื่นภายในอาร์เรย์เดียวกันคุณสามารถทำได้ หากคุณย้ายองค์ประกอบปัจจุบันไปยังตำแหน่งก่อนหน้าไม่มีปัญหาในการทำซ้ำครั้งถัดไปคุณจะได้รับรายการถัดไปเหมือนว่าคุณไม่ได้ทำอะไรเลย
พิจารณารหัสนี้ที่เราย้ายรายการที่ตำแหน่งดัชนี 5 ไปยังตำแหน่งดัชนี 2 เมื่อดัชนีนับได้ถึง 5
var ar = [0,1,2,3,4,5,6,7,8,9];
ar.forEach((e,i,a) => {
i == 5 && a.splice(2,0,a.splice(i,1)[0])
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 5 5 - 6 6 - 7 7 - 8 8 - 9 9
อย่างไรก็ตามถ้าเราย้ายองค์ประกอบปัจจุบันไปที่อื่นนอกเหนือจากตำแหน่งดัชนีปัจจุบันสิ่งที่ได้รับยุ่งเล็กน้อย จากนั้นรายการถัดไปจะเปลี่ยนเป็นรายการที่ถูกย้ายและในการทำซ้ำครั้งถัดไปเราจะไม่สามารถมองเห็นหรือประเมินผลได้
พิจารณารหัสนี้ที่เราย้ายรายการที่ตำแหน่งดัชนี 5 ไปยังตำแหน่งดัชนี 7 เมื่อดัชนีนับได้ถึง 5
var a = [0,1,2,3,4,5,6,7,8,9];
a.forEach((e,i,a) => {
i == 5 && a.splice(7,0,a.splice(i,1)[0])
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 5 5 - 6 7 - 7 5 - 8 8 - 9 9
ดังนั้นเราไม่เคยเจอกัน 6 ครั้งในวงวน โดยปกติในลูปสำหรับคุณคาดว่าจะลดค่าดัชนีเมื่อคุณย้ายไอเท็มอาร์เรย์ไปข้างหน้าเพื่อให้ดัชนีของคุณยังคงอยู่ที่ตำแหน่งเดิมในการทำงานครั้งถัดไปและคุณยังสามารถประเมินรายการที่ถูกย้ายไปยังตำแหน่งของรายการ สิ่งนี้ไม่สามารถทำได้ด้วยเมธอดอาร์เรย์ คุณไม่สามารถแก้ไขดัชนี ตรวจสอบรหัสต่อไปนี้
var a = [0,1,2,3,4,5,6,7,8,9];
a.forEach((e,i,a) => {
i == 5 && (a.splice(7,0,a.splice(i,1)[0]), i--);
console.log(i,e);
}); // 0 0 - 1 1 - 2 2 - 3 3 - 4 4 - 4 5 - 6 7 - 7 5 - 8 8 - 9 9
อย่างที่คุณเห็นเมื่อเราลดi
มันจะไม่ดำเนินต่อจาก 5 แต่ 6 จากที่มันถูกทิ้ง
ดังนั้นจงเก็บเรื่องนี้ไว้ในใจ