2011-08-15 11 views
13

मैं जावास्क्रिप्ट में नया हूं, और ध्यान दें कि आपको सरणी के आकार को निर्दिष्ट करने की आवश्यकता नहीं है और अक्सर लोग गतिशील रूप से समय पर एक तत्व बनाने के लिए देखते हैं। यह अन्य भाषाओं में एक बड़ी प्रदर्शन समस्या होगी क्योंकि आपको सरणी के लिए मेमोरी को फिर से आवंटित करने की आवश्यकता होगी क्योंकि यह आकार में बढ़ता है।क्या जावास्क्रिप्ट सरणी वास्तव में सूचियों से जुड़ी हैं?

क्या यह जावास्क्रिप्ट में कोई समस्या नहीं है? यदि हां, तो क्या एक सूची संरचना उपलब्ध है?

+0

आकार बदलने योग्य सरणी वाले भाषाओं में, आवंटित वास्तविक स्मृति आमतौर पर बढ़ने के लिए दोगुना हो जाती है। नतीजतन, आप किसी भी भाषा में स्मृति को लगातार आवंटित नहीं करेंगे। –

+0

धन्यवाद दोस्तों, यह मेरे लिए ठीक काम करता है। मैं बस यह सुनिश्चित करना चाहता था कि मैं जावास्क्रिप्ट गलत पैस नहीं कर रहा था। –

उत्तर

14

यह संभवतः आपके द्वारा उपयोग किए जाने वाले जावास्क्रिप्ट इंजन पर निर्भर करता है।

इंटरनेट एक्सप्लोरर उस काम को करने के लिए स्पैर सरणी और घने सरणी के मिश्रण का उपयोग करता है। कुछ और गोरियों के विवरण यहां समझाए गए हैं: http://blogs.msdn.com/b/jscript/archive/2008/04/08/performance-optimization-of-arrays-part-ii.aspx

4

वे वास्तव में कस्टम ऑब्जेक्ट्स की तरह अधिक हैं जो गुणों को इंडेक्स के रूप में उपयोग करते हैं। उदाहरण:

var a = { "1": 1, "2": 2}; 
a.length = 2; 
for(var i=0;i<a.length;i++) 
    console.log(a[i]); 

a लगभग एक सरणी की तरह व्यवहार करेगा, और आप भी उस पर Array.prototype से कार्यों कॉल कर सकते हैं।

+0

क्या आपको शून्य इंडेक्स याद नहीं है? – Zlatko

+0

मुझे नहीं पता कि @Eliu क्या दिखाने की कोशिश कर रहा है। कोड इस तरह से कभी काम नहीं करेगा (शायद इरादा ??)। स्ट्रिंग कुंजियों को तारों के रूप में संदर्भित करने की आवश्यकता है, पूर्णांक के रूप में नहीं। तो यहां तक ​​कि '' 'एक [1]' '' 'का मूल्य भी नहीं होगा। वस्तुओं को सूचीबद्ध करने के लिए उचित कोड '' '' के लिए '' '' या ' '' 'console.log (एक ['' + (i + 1)]);' ' –

3

जावास्क्रिप्ट सरणी सी/सी ++ या अन्य भाषाओं जैसे सच सरणी नहीं हैं। इसलिए, वे उतने कुशल नहीं हैं, लेकिन वे उपयोग करने के लिए तर्कसंगत रूप से आसान हैं और सीमा अपवादों से बाहर नहीं फेंकते हैं।

7

गतिशील भाषाओं के बारे में बात यह है कि वे गतिशील हैं। जावा में ऐरेलिस्ट की तरह, या पर्ल, PHP और पायथन में सरणी, जावास्क्रिप्ट में एक ऐरे एक निश्चित मात्रा में स्मृति आवंटित करेगा और जब यह बहुत बड़ा हो जाएगा, तो भाषा स्वचालित रूप से ऑब्जेक्ट में संलग्न होती है। क्या यह सी ++ या जावा के रूप में भी कुशल है? नहीं (सी ++ जेएस के सर्वोत्तम कार्यान्वयन के आसपास सर्किल चला सकता है), लेकिन लोग जेएस में अभी भी क्वैक नहीं बना रहे हैं (अभी तक)।

वास्तव में कुछ विशेष तरीकों के साथ हैश मैप्स के रूप में उनके बारे में सोचना बेहतर है - आखिरकार, यह मान्य है: var a = []; a['cat']='meow';

+0

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

+7

और, लोगों ने जेएस और वेबजीएल में भूकंप बनाया है: पी – fabspro

+3

http://code.google.com/p/quake2-gwt-port/ – fabspro

10

जावास्क्रिप्ट सरणी को आम तौर पर एक अतिरिक्त सुविधा के साथ हैशैप्स (जैसे जावास्क्रिप्ट ऑब्जेक्ट्स) के रूप में लागू किया जाता है: एक विशेषता length है, जो एक कुंजी के रूप में उपयोग किए जाने वाले उच्चतम सकारात्मक पूर्णांक से अधिक है। से स्ट्रिंग्स, फ़्लोटिंग-पॉइंट नंबरों, चाबियों के रूप में नकारात्मक संख्याओं का उपयोग करके आपको कुछ भी नहीं रोकता है। अच्छी समझ को छोड़कर कुछ भी नहीं।

+0

मेरे पास एक केनू-पल पढ़ रहा था। धन्यवाद – spencercooly

4

सं

क्या जावास्क्रिप्ट सरणियों कर रहे हैं और कर रहे हैं भाषा विनिर्देश विशेष रूप से खंड 15.4 से निर्धारित होता है नहीं। Array उन परिचालनों के संदर्भ में परिभाषित किया गया है जो किसी विशेष डेटा संरचना के मेमोरी लेआउट के कार्यान्वयन विवरण प्रदान नहीं करते हैं।

Array एक जुड़ी हुई सूची के शीर्ष पर लागू किया जा सकता है? हाँ। इससे कुछ ऑपरेशन तेजी से shift और unshift कुशल हो सकते हैं, लेकिन Array को अक्सर इंडेक्स द्वारा एक्सेस किया जाता है जो लिंक की गई सूचियों के साथ कुशल नहीं है।

लिंक किए गए सूचियों के बिना दोनों दुनिया के सर्वश्रेष्ठ प्राप्त करना भी संभव है। circular queues जैसे आकस्मिक स्मृति डेटा संरचनाएं सामने और कुशल यादृच्छिक पहुंच से कुशल सम्मिलन/निष्कासन दोनों हैं।

प्रैक्टिस में, अधिकांश दुभाषिया एक सी ++ vector या जावा ArrayList के समान आकार बदलने योग्य या पुनर्विक्रेता योग्य सरणी के आधार पर डेटा संरचना का उपयोग करके घने सरणी को अनुकूलित करते हैं।

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