2009-09-06 12 views
61

के रूप में अगर मैंने किया जावास्क्रिप्ट

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myHash['key2'] = { Name: 'Object 2' }; 
myHash['key3'] = { Name: 'Object 3' }; 

कैसे मैं key2 को दूर करते हैं, और object 2 हैश से देखते हुए में हैश से कुंजी + मूल्य निकालने का तरीका यह है कि यह समाप्त होता है एक राज्य में:

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myHash['key3'] = { Name: 'Object 3' }; 

हटाएं जो मैं चाहता हूं उसे नहीं करता; इस

delete myHash['key2'] 

बस मुझे देता है:

var myHash = new Array(); 
myHash['key1'] = { Name: 'Object 1' }; 
myhash['key2'] = null; 
myHash['key3'] = { Name: 'Object 3' }; 

केवल डॉक्स मैं पर पूर्णांक indexers, जो मुझे नहीं है साथ splice और slice सौदा मिल सकता है।

संपादित करें: मैं भी नहीं पता है कि 'कुंजी 2' जरूरी स्थिति में ठीक मामूली रेड हेरिंग है [1]

अद्यतन

हटाना सतह पर मैं क्या चाहते हो प्रतीत होता है,

[ { Name: 'Object 1' }, null, { Name: 'Object 3' } ] 
: तथापि, json2.js का उपयोग कर सर्वर से वापस धकेलने के लिए json करने के लिए मेरे वस्तु stringify को,

के बाद Ive नष्ट कर दिया im, myHash के रूप में धारावाहिक रूप हो जाता है

क्या यह json2.js में एक बग है? या यह कुछ है जो मैं हटाने के साथ गलत कर रहा हूँ?

धन्यवाद

+3

आप जो कर रहे हैं वह किसी ऑब्जेक्ट में गुण जोड़ रहा है, जो किसी सरणी/हैश में तत्व जोड़ने से अलग है। आप एक संपत्ति को कम करने के लिए एक रास्ता तलाश रहे हैं, कम या ज्यादा। जैसा कि अन्य टिप्पणियों में उल्लिखित है, myHash.key1 को हटाने का प्रयास करें। –

+2

यदि यह हैशटेबल है, तो आपको 'var myHash = new Array()' के बजाय 'var myHash = new object() 'का उपयोग करना चाहिए। – cprcrack

उत्तर

150

तुम delete लिए देख रहे हैं:

delete myhash['key2'] 

देखें Core Javascript Guide

+1

मैंने सोचा कि यह सही था, इसलिए मैंने इसे पहली जगह क्यों कोशिश की। यह काम करने के लिए _seem_ करता है, मेरी समस्या वास्तव में Json.stringify में निहित है, बीमार अद्यतन –

+6

इसके बजाय splice फ़ंक्शन का उपयोग करें। सरणी में एक छेद छोड़ दें। –

+0

यह मेरे लिए काम करता है। धन्यवाद! –

1

एक अन्य विकल्प इस John Resig remove method हो सकते हैं। आपको जो चाहिए वह बेहतर फिट हो सकता है। यदि आप सरणी में सूचकांक जानते हैं।

+2

अच्छी तरह से इंडेक्स नहीं है सवाल यह है कि –

+0

हे @ एंड्रयूबुलॉक में एक प्रश्न है, मुझे एक प्रश्न है जो मुझे JSON सरणी एक्स: [{\ "Countrycode \": \ "DE \", \ "count \": \ "3 \ "}] लेकिन मैं इस तरह [{" DE ":" 3 "}] प्राप्त करना चाहता हूं लेकिन मुझे यह आउटपुट नहीं मिला है कृपया मेरी मदद करें –

11

हैश के लिए आप new Array(); का उपयोग क्यों करते हैं? आपको इसके बजाय new Object() का उपयोग करने की आवश्यकता है।

और मुझे लगता है कि आपको वह चाहिए जो आप चाहते हैं।

+4

मुझे बिल्कुल नया पसंद नहीं है। मैं var myHash = [] पसंद करते हैं; – Nosredna

+10

या इस मामले में, myHash = {}; :-) – Nosredna

+0

@ नोसेरेना पूरी तरह सहमत हैं :) –

6

आप कहते हैं कि आपको जरूरी नहीं है कि 'key2' स्थिति में है [1]। अच्छा, यह नहीं है। स्थिति 1 पर कब्जा किया जाएगा MyHash [1]।

आप जावास्क्रिप्ट सरणी का दुरुपयोग कर रहे हैं, जो (कार्यों की तरह) कुंजी/मूल्य हैश की अनुमति देता है। हालांकि जावास्क्रिप्ट इसे अनुमति देता है, यह आपको इससे निपटने के लिए सुविधाएं नहीं देता है, क्योंकि सहयोगी सरणी के लिए डिज़ाइन की गई भाषा होगी। जावास्क्रिप्ट की सरणी विधियां केवल क्रमांकित गुणों के साथ काम करती हैं।

आपको सबसे पहले जो करना चाहिए वह सरणी के बजाय वस्तुओं पर स्विच करना है। आपके पास ऑब्जेक्ट की बजाय सरणी का उपयोग करने का कोई अच्छा कारण नहीं है, इसलिए ऐसा न करें। यदि आप किसी सरणी का उपयोग करना चाहते हैं, तो केवल तत्वों को संख्या दें और हैश के विचार को छोड़ दें। एक सरणी का इरादा जानकारी पकड़ना है जिसे संख्यात्मक रूप से अनुक्रमित किया जा सकता है।

यदि आप चाहें तो निश्चित रूप से, एक हैश (ऑब्जेक्ट) को सरणी में डाल सकते हैं।

myhash[1]={"key1","brightOrangeMonkey"}; 
+0

आप सही हैं, धन्यवाद :) मेरा जवाब देखें –

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