2012-02-20 19 views
8

3 घंटे पहले, मैं इतना में एक प्रश्न पूछा, एक वस्तु का एक हिस्सा हटाने के बारे में, तो मैं यह करने के लिए इस सवाल का जुड़ा हुआ:जावास्क्रिप्ट में सरणी से हटाएँ

delete a part of object in javascript

लेकिन अब एक और समस्या है जब हुआ मैं उस सरणी से हटा दिया। मैं उस ऑब्जेक्ट का उपयोग फ्लेक्सीग्रिड को पॉप्युलेट करने के लिए करता हूं। लेकिन जब मैं कोड का पालन करते हुए उस वस्तु से कोई आइटम हटाने के बजाय कि आइटम को हटाने, यह अनिर्धारित को :(सेट करता है और flexigrid इनपुट डेटा के लिए यह स्वीकार नहीं किया।

for (var i = 0; i < Roomdata.length; i++) { 

    if(Roomdata[i].id = X) { 

     delete Roomdata[i]; 
     break; 

    } 
}     

उदाहरण के लिए, कल्पना मैं 3 आइटम नहीं हैं इस तरह Roomdata में:

{item1, item2, item3} 

जब मैं ITEM2 हटाने के लिए इस कोड फोन, Roomdata वस्तु इस तरह दिखता है:

{item1, undefined, item3} 

और यह एक बुरा प्रारूप के रूप में flexigrid द्वारा स्वीकार किया जा रहा है इनपुट डेटा

क्या कोई समाधान है?

धन्यवाद हर शरीर और मेरा बुरा सिंटैक्स के बारे में खेद (मैं अंग्रेजी में नया हूँ)

संबंध है, Foroughi

+0

के संभावित डुप्लिकेट का समाधान होगा [जावास्क्रिप्ट सरणी तत्वों को हटाएँ] (http://stackoverflow.com/questions/500606/javascript-array-delete-elements) - इससे पहले कि आप खोज का उपयोग करें प्रश्न पूछें। –

+0

आपके पिछले प्रश्न का स्वीकृत उत्तर पहले से ही 'splice' का उपयोग करने का सुझाव देता है। आप फिर से इस सवाल क्यों पूछते हैं? –

+0

क्षमा करें @ फ़ेलिक्स, लेकिन मुझे लगता है क्योंकि मैंने पहले से ही इस मुद्दे के बारे में एक प्रश्न पूछा है, मैंने इस प्रश्न से पाठकों को और अधिक समझने योग्य प्रश्न पढ़ने में मदद करने के लिए कहा है, फिर भी –

उत्तर

49

विपरीत क्रम में सरणी के माध्यम से चलें, और तत्व को हटाने के लिए .splice का उपयोग करें।
आपको रिवर्स ऑर्डर में चलना है, अन्यथा आप छोड़ने वाले तत्व से नीचे देखें।

for (var i = Roomdata.length-1; i >= 0; i--) { 
    if (Roomdata[i].id == X) { 
     Roomdata.splice(i, 1); 
     break; 
    } 
} 

अगर आप उलटे क्रम में चलना नहीं है क्या होता है:

// This happens in a for(;;) loop: 
// Variable init: 
var array = [1, 2, 3]; 
var i = 0; 

array.splice(i, 1); // array = [2, 3] array.length = 2 
// i < 2, so continue 
i++; // i = 1  

array.splice(i, 1); // i=1, so removes item at place 1: array = [2] 
// i < 1 is false, so stop. 

// array = [2]. You have skipped one element. 
+1

पूर्ण उत्तर और इसकी टिप्पणियों के लिए धन्यवाद, वैसे भी आप मेरी मदद करते हैं और आप बहुत अच्छे हैं, धन्यवाद –

+2

आपको तत्व को विपरीत क्रम में पार करने की आवश्यकता नहीं है क्योंकि आप 'splice' को कॉल करने के बाद लूप को समाप्त कर रहे हैं। यदि आप किसी सरणी से कई तत्वों को हटाना चाहते हैं, तो हाँ, लेकिन इस मामले में इसकी आवश्यकता नहीं है। –

+0

@ फ़ेलिक्सक्लिंग आप सही हैं। हालांकि, चूंकि दूसरे प्रश्न पर स्वीकृत उत्तर काम नहीं करता है, इसलिए मुझे लगता है कि 'ब्रेक;' को हटा देना होगा। –

4

क्या आपके पास एक सरणी है। तत्व को delete द्वारा नहीं, किसी सरणी से तत्व निकालने के लिए आपको splice() method का उपयोग करना चाहिए।

for (var i = 0; i < Roomdata.length; i++) { 

    if(Roomdata[i].id = X) { 

     Roomdata.splice(i, 1); 
     break; 

    } 
} 
+2

दूसरा तर्क निर्दिष्ट करता है कि कितनी वस्तुओं को हटाया जाना है। ** '.plice (i, 0) 'कुछ भी नहीं हटाता **। यहां तक ​​कि यदि आप इसे '.plice (i, 1)' से प्रतिस्थापित करते हैं, तो आप बदले गए इंडेक्स के लिए लेखांकन नहीं करके तत्व छोड़ रहे हैं। –

+0

@RobW: Whoops। और तत्वों को छोड़ने के लिए, वह वैसे भी हटाने पर तोड़ रहा है, इसलिए छोड़ने के लिए नोटिंग। – Matt

3

हटाने के बावजूद जोड़ का उपयोग करना।

Roomdata.splice(i, 0); 

splice विशेषता रिक्त स्ट्रिंग तत्व, अपरिभाषित संदर्भ, NULLs और FALSEs को हटा देती है।

यह आपकी समस्या

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