तो, इसका परिणाम 0 में क्यों होता है और मैं वास्तविक आकार कैसे प्राप्त करूं?शाब्दिक सरणी की लंबाई कैसे प्राप्त करें?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
तो, इसका परिणाम 0 में क्यों होता है और मैं वास्तविक आकार कैसे प्राप्त करूं?शाब्दिक सरणी की लंबाई कैसे प्राप्त करें?
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
के बाद से है कि एक वस्तु है, जो गुण के शामिल है है, और कुंजी/मान जोड़े के रूप (धारणात्मक एक साहचर्य सरणी के समान है, या एक हैश तालिका) तक लग कुछ इस तरह करना होगा:
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
var size = Object.size(array);
मूल रूप से जब आप
array["foo"] = "bar"
यह सिर्फ सरणी है, जो एक वस्तु है के लिए कुछ और गुण कहते है। जावास्क्रिप्ट में, array.foo और array ['foo'] का अर्थ समान है।
धन्यवाद चला जाता है समाशोधन कि बाहर के लिए। लेकिन यह सवाल का जवाब नहीं देता है? – Mantar
यह इसे किसी ऑब्जेक्ट में परिवर्तित नहीं करता है। Arrays * ऑब्जेक्ट्स हैं, इसलिए आप उन पर मनमानी गुण सेट कर सकते हैं। – lonesomeday
शायद मैं अनुभवहीन रहा हूँ (मेरे जावास्क्रिप्ट यह क्या हो सकता है नहीं है), लेकिन यह कुछ इस तरह नहीं होना चाहिए:
var array = [];
array[0] = "bar";
array[1] = "foo";
document.write(array.length);
वास्तविक आकार 0 क्योंकि आप किसी भी डाल नहीं किया है वस्तुओं को सरणी वस्तु में - यह केवल एक विधि (पुश इत्यादि) या किसी अनुक्रमित संपत्ति (या कन्स्ट्रक्टर में) को मान निर्दिष्ट करने के माध्यम से किया जा सकता है।
जैसा कि कहा गया है, आप एक सरणी से निपट नहीं रहे हैं लेकिन एक वस्तु। किसी ऑब्जेक्ट में गुणों को गिनने के लिए निर्देशों के लिए How to efficiently count the number of keys/properties of an object in JavaScript? देखें (प्रश्न में स्वयं)।
आप सरणी पर एक संपत्ति की स्थापना कर रहे हैं, नहीं यह एक नए तत्व दे रही है। किसी भी अन्य जावास्क्रिप्ट ऑब्जेक्ट की तरह, Arrays मनमानी गुण प्राप्त कर सकते हैं। उदाहरण के लिए:
var foo = [];
foo.bar = 'foobar';
console.log(foo.bar); // outputs 'foobar'
console.log(foo); // outputs [] -- empty array
एक सरणी के लिए आइटम जोड़ने के लिए, का उपयोग Array.push
:
var foo = {};
foo['bar'] = 'foobar';
console.log(foo); // outputs {bar: 'foobar'}
सबसे पहले:
var foo = [];
foo.push('foobar');
console.log(foo); // outputs ['foobar']
आप कुंजी => मान युग्म चाहते हैं, बजाय किसी चीज़ का इस्तेमाल , लंबाई 0 है क्योंकि array
में आइटमों की संख्या 0.
जब आप करते हैं यह वाक्यविन्यास array["foo"] = "bar"
आप foo
नामक एक संपत्ति बना रहे हैं जिसका मूल्य bar
है। लंबाई अभी भी 0 के बाद से आप सरणी में नहीं जोड़ा है कुछ भी, तो आप सिर्फ सरणी
कार्य संस्करण यहां पर नए गुणों निर्धारित किया है: है http://jsfiddle.net/VyjJD/3/
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
array.bin = function() { return "bin"; };
array[0] = "bar";
array[1] = "foo";
array[2] = "bin";
array[3] = "bat";
var props = 0;
for (key in array)
props++;
document.write(array.length + "<br />"
+ props + "<br />"
+ (array.foo == array["foo"]) + "<br />"
+ array.bar + "<br />"
+ array.bin());
सूचना array.length = 4
कि लेकिन props = 7
जो सभी संपत्तियों और ऐरे में वस्तुओं की संख्या।
+100। महान स्पष्टीकरण। धन्यवाद। – Radek
या भी: Object.prototype.size = function() ... और फिर आप उपयोग कर सकते हैं इसे पसंद: var आकार = array.size() –
... या एक सादे पुराने समारोह के रूप में, और बस कर ' getSize (var); ' – karim79
जेएस में एक एसोसिएटिव सरणी जैसी कोई चीज़ नहीं है। यह एक वस्तु है और इसकी संपत्तियों तक पहुंचने के लिए सिर्फ एक वैकल्पिक वाक्यविन्यास है। 'सरणी [" foo "] के बजाय 'आप' array.foo' लिख सकते हैं। यही कारण है कि लंबाई संपत्ति काम नहीं करता है। वह एक सरणी ऑब्जेक्ट पर गुण सेट कर रहा है और किसी सरणी में आइटम नहीं जोड़ रहा है। – DanMan