2012-08-23 14 views
8

मुझे पता है कि जावास्क्रिप्ट में एक सरणी किसी ऑब्जेक्ट से कुछ और नहीं है। जब मैं उस तरह एक सरणी को परिभाषित:सरणी व्यवहार की प्रतिलिपि कैसे करें?

var array; 
array = [ "a", "b", "c" ]; 

और

Object.keys(array); 

चलाने मैं सरणी निम्नलिखित हो: ["0", "1", "2"]array की ऐरे लंबाई 3 है।

जब मैं की तरह कोई प्रॉपर्टी जोड़ते हैं:

array["a"] = "d"; 

Object.keys()["0", "1", "2", "a"] लौट रहा है, लेकिन array की सरणी लंबाई अभी भी 3 है।

लेकिन जब मैं उस तरह कोई प्रॉपर्टी जोड़ते हैं:

array["3"] = "d"; 

array की लंबाई अब 4 है।

यदि array सिर्फ एक और वस्तु है, तो मैं अपने ऑब्जेक्ट को var myArray = {} जैसे स्क्रैच से कैसे शुरू करूं?

+6

[कंगैक्स से इस क्लासिक ब्लॉग पोस्ट को पढ़ें] (http://perfectionkills.com/how-ecmascript-5-still-does-not-allow-to-subclass-an-array/) - यह पता चला है कि आप आप जो भी पूछ रहे हैं वह नहीं कर सकता। – Pointy

+0

संभावित डुप्लिकेट [वस्तुओं की सरणी पर जावास्क्रिप्ट सरणी लंबाई गलत] (http://stackoverflow.com/questions/2528680/javascript-array-length-incorrect-on-array-of-objects) – epascarello

उत्तर

1

.length संपत्ति में केवल संख्यात्मक सूचकांक वाले गुण शामिल हैं, विशेष रूप से उन पूर्णांक वाले मान जो शून्य से अधिक या बराबर हैं। ...

Object.keys(array).length 

के बाद से Object.keys() एक सरणी में ही होगा रिटर्न:

आप कैसे एक सरणी या किसी वस्तु से सभी कुंजी की कुल संख्या प्राप्त करने के लिए कह रहे हैं तो आप कर सकता है एक .length संपत्ति।

+0

पीएस ध्यान दें कि 'ऑब्जेक्ट.कीज़ (सरणी)। लम्बाई' की तुलना में 'लम्बाई' वास्तव में _greater_ हो सकता है क्योंकि (जैसा कि क्लाइड द्वारा इंगित किया गया है) लंबाई उच्चतम पूर्णांक सूचकांक से अधिक है, लेकिन जेएस स्पैर सरणी और 'ऑब्जेक्ट.कीज़() 'केवल उन इंडेक्स को लौटाता है जिन्हें वास्तव में असाइन किया गया है। – nnnnnn

+0

तो मैं अनुमान लगा रहा हूं कि ऑब्जेक्ट में नई संपत्ति जोड़ने पर हर बार 'लंबाई' का मान गणना की जाती है? – Amberlamps

1

सरणी के length संपत्ति उच्चतम संख्यात्मक सूचकांक का मूल्य है + 1.

तो array["3"] = "d"; के बाद उच्चतम संख्यात्मक इंडेक्स 3 है इसलिए लंबाई रिटर्न 4

Object.keys(array).length आप लंबाई देना चाहिए।

+0

'सरणी [1000000000] =" x "' इस तरह से संचालित नहीं होती है। सीमा कहाँ है? – Amberlamps

+0

'var सरणी आज़माएं; सरणी = ["ए", "बी", "सी"]; सरणी [1000000000] = 1; सरणी।लंबाई; ' –

+0

अनुक्रमणिका में एक और' 0' जोड़ें और पुनः प्रयास करें। – Amberlamps

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