2014-10-26 26 views
20

मैं एक सरणी है:एक सूचकांक के बाद सभी आइटम निकालें

array = ['mario','luigi','kong'] 

मैं अपने जोड़ समारोह एक सूचकांक से पहले सभी आइटम हटाने के लिए कॉल करें:

array.splice(1) //-> ['luigi','kong'] 

मैं बस सोच रहा हूँ यदि के समान कोई फ़ंक्शन है, तो सभी आइटमों को हटाने के लिए इंडेक्स:

छद्म कोड

array.mirrorsplice(1) //-> ['mario','luigi'] 
+0

संभावित डुप्लिकेट [विभाजन के उपयोग से जावास्क्रिप्ट में ऑब्जेक्ट्स की सरणी में किसी स्थिति के बाद सभी तत्वों को निकालें] (https://stackoverflow.com/questions/24862347/remove-all-elements-after-a-position- इन-ए-एरे-ऑफ-ऑब्जेक्ट्स-इन-जावास्क्रिप्ट-का उपयोग) –

उत्तर

43

उपयोग .length एक सरणी है, जो जोड़ की तुलना में तेजी है के लिए एक नया आकार निर्धारित करने के लिए() उत्परिवर्तित करने के लिए:

var array = ['mario','luigi','kong', 1, 3, 6, 8]; 
array.length=2; 
alert(array); // shows "mario,luigi"; 

क्यों यह तेजी से है? क्योंकि .splice() को सभी हटाए गए आइटमों वाला एक नया सरणी बनाना है, जबकि .length कुछ भी नहीं बनाता है और एक नई सरणी के बजाय "नंबर" देता है।

splice() उपयोग करने के लिए, आप यह एक नकारात्मक सूचकांक, एक सरणी के अंत काटना फ़ीड कर सकते हैं एक बड़ी संख्या के साथ:

var array = ['mario','luigi','kong']; 
array.splice(-1, 9e9); 
alert(array); // shows "mario,luigi"; 
+2

'लंबाई' को कम करने से स्मृति रिसाव हो सकता है या जावास्क्रिप्ट इंजन इसे संभालता है? --- ठीक है, ईसीएमएस्क्रिप्ट चश्मा के अनुसार यह स्पष्ट रूप से परिभाषित और सही ढंग से संभाला जाता है, तत्व हटा दिए जाएंगे। http://stackoverflow.com/questions/31547315/is-it-an-antipattern-to-set-an-array-length-in-javascript/31560542#31560542 –

+1

प्रस्तावित समाधानों की तुलना में यह बेंचमार्क देखें: https: // jsperf.com/remove-all-array-elements-after-a-given-index – Stephan

4

हालांकि सरणी लंबाई करने के लिए एक छोटा मान निर्दिष्ट (के रूप में @ दंडवीस ने कहा) एक सरणी से पिछला तत्व निकालने का सबसे तेज़ और सरल तरीका है, आप splice जैसी समान विधि का उपयोग करके भी ऐसा कर सकते हैं जिसे slice के नाम से जाना जाता है। निम्नलिखित की तरह:

array = ['mario', 'luigi', 'kong']; 
 

 
array = array.slice(0, 2); //Need to assign it to the same or another variable 
 

 
console.log(array); //["mario", "luigi"]

क्या आप slice विधि से लौटे मान संग्रहीत करना देख सकते हैं। यह समझने के लिए 'क्यों', यहाँ slice और splice के बीच मुख्य अंतर हैं विधि:

  • splice() विधि एक सरणी में निकाले गए आइटम (रों) देता है और slice() विधि एक सरणी में चयनित तत्व (रों) देता है, एक नई सरणी वस्तु के रूप में।
  • splice() विधि मूल सरणी बदलती है और slice() विधि मूल सरणी को परिवर्तित नहीं करती है।
+2

यहां एक छोटा बेंचमार्क है (https://jsperf.com/remove-all-array-elements-after-a-given-index) इस प्रश्न के लिए दिए गए समाधान की तुलना करना। – Stephan

संबंधित मुद्दे