सरणी ऑब्जेक्ट विधियों के साथ आप लूप के लिए मूल की तुलना में अभी तक ऐरे सामग्री को संशोधित कर सकते हैं, इन विधियों में एक महत्वपूर्ण कार्यक्षमता का अभाव है। आप रन पर इंडेक्स को संशोधित नहीं कर सकते।
उदाहरण के लिए यदि आप वर्तमान तत्व को निकालेंगे और इसे उसी अनुक्रमणिका में किसी अन्य अनुक्रमणिका स्थिति में रखेंगे तो आप आसानी से ऐसा कर सकते हैं। यदि आप वर्तमान तत्व को पिछली स्थिति में ले जाते हैं, तो अगले पुनरावृत्ति में कोई समस्या नहीं है, आपको वही अगला आइटम मिलेगा जैसे कि आपने कुछ भी नहीं किया था।
इस कोड पर विचार करें जहां हम आइटम को इंडेक्स स्थिति 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 से जारी रहेगा, जहां से इसे छोड़ा गया था।
इसलिए इस बात का ध्यान रखें।