2013-06-07 9 views
48

में वस्तुओं की संख्या की गणना मैं की तरह एक वस्तु कुछ है:जावास्क्रिप्ट वस्तु

Object {0=Object, 1=Object, 2=Object} // Output from console.log(obj.Data); 

लेकिन वहाँ कोई रास्ता नहीं है कि मैं वस्तु में वस्तुओं की संख्या की गणना कर सकते हैं, तो अंत में उप वस्तुओं से विशेषता मान प्राप्त है ।

मैं

console.log(obj.Data[0].length); // It does not work 

console.log(obj.Data.length); // It does not work 

की कोशिश की है यह मेरे लिए थोड़ा मुश्किल है। आशा है कि आप लोग मदद कर सकते हैं।

+0

आप पोस्ट करें सकता है पूरा वस्तु? –

+1

आप इस तरह से किसी ऑब्जेक्ट का उपयोग क्यों कर रहे हैं? आपके प्रश्न पर विचार करने के लिए बहुत सी चीजें हैं - आपको यह समझने की आवश्यकता है कि कौन से गुण हैं, कौन सा संख्याएं हैं, प्रोटोटाइप यहां गड़बड़ी में कैसे जोड़ सकते हैं, और इसी तरह। क्यों न सिर्फ एक सरणी का उपयोग करें? – Sacho

+0

भले ही इस क्यू को डुप्लिकेट चिह्नित किया गया हो, फिर भी स्वीकृत उत्तर मेरे लिए आसान काम करता है कि पहले पूछे जाने वाले प्रश्नों में दिए गए समाधान। –

उत्तर

80

पुराने और नए ब्राउज़र दोनों के साथ उत्कृष्ट प्रदर्शन और संगतता के साथ ऐसा करने का सबसे आसान तरीका है, या तो अपने पृष्ठ में Lo-Dash या Underscore शामिल करना है।

तो आप का उपयोग या तो _.size(object) या _.keys(object).length

अपने obj.Data के लिए, आप के साथ इस परीक्षण कर सकते हैं कर सकते हैं:

console.log(_.size(obj.Data)); 

या:

console.log(_.keys(obj.Data).length); 

लो-डैश और अंडरस्कोर दोनों उत्कृष्ट रहे हैं पुस्तकालयों; आप या तो अपने कोड में एक बहुत उपयोगी पाएंगे। (बल्कि वे एक दूसरे के समान हैं, लो-डैश कुछ Advantanges के साथ एक नया संस्करण है।)

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

हालांकि

console.log(ObjectLength(obj.Data)); 

कि कोड के रूप में तेजी से के रूप में यह आधुनिक ब्राउज़रों में हो सकता है नहीं है,:

function ObjectLength(object) { 
    var length = 0; 
    for(var key in object) { 
     if(object.hasOwnProperty(key)) { 
      ++length; 
     } 
    } 
    return length; 
}; 

आप के साथ इस परीक्षण कर सकते हैं। एक संस्करण बहुत तेजी से आधुनिक ब्राउज़रों में है और अभी भी है कि पुराने लोगों में काम करता है के लिए, आप उपयोग कर सकते हैं:

function ObjectLength_Modern(object) { 
    return Object.keys(object).length; 
} 

function ObjectLength_Legacy(object) { 
    var length = 0; 
    for(var key in object) { 
     if(object.hasOwnProperty(key)) { 
      ++length; 
     } 
    } 
    return length; 
} 

var ObjectLength = 
    Object.keys ? ObjectLength_Modern : ObjectLength_Legacy; 

और पहले की तरह, के साथ यह परीक्षण:

console.log(ObjectLength(obj.Data)); 

इस कोड का उपयोग करता है आधुनिक ब्राउज़रों में Object.keys(object).length और पुराने ब्राउज़र के लिए एक लूप में गिनने के लिए वापस गिर जाता है।

लेकिन यदि आप इस काम पर जा रहे हैं, तो मैं इसके बजाय लो-डैश या अंडरस्कोर का उपयोग करने की सलाह दूंगा और उन पुस्तकालयों के सभी लाभ प्राप्त करूंगा।

मैंने jsPerf that compares the speed of these various approaches स्थापित किया। कृपया इसे किसी भी ब्राउज़र में चलाएं जो आपके पास परीक्षण में जोड़ने के लिए आसान है।

suggesting Object.keys for newer browsers के उत्तर में उनके उत्तर में धन्यवाद।

+0

इस प्रकार की फीचर-डिटेक्शन करने के लिए सशर्त ऑपरेटर का उपयोग अत्यधिक जटिल लगता है। –

+0

हाय, क्या आप इस पर समझा सकते हैं? क्या मैं इसे किसी फ़ंक्शन में डाल सकता हूं और जब भी हमें इसकी आवश्यकता हो तो कॉल कर सकते हैं? पुराने ब्राउज़र का उपयोग करने वाले उपयोगकर्ताओं को सुरक्षित सावधानी के लिए, मैं इसे अपनाने का प्रयास करूंगा। –

+1

यह करने के लिए यह एक बहुत ही आम तरीका है, लेकिन पर्याप्त उचित है, आप आसानी से एक ही कथन के साथ एक ही काम कर सकते हैं। मुख्य बात यह है कि फ़ंक्शन के अंदर फ़ंक्शन के बाहर इसे करना है। –

41

हाल ब्राउज़र में, आप उपयोग कर सकते हैं:

Object.keys(obj.Data).length 

MDN

देखें पुराने ब्राउज़र के लिए, माइकल Geary के जवाब में for-in पाश का उपयोग करें।

+0

हाय बाड़ार, किसी भी तरह से यह कंसोल के तहत लॉग इन नहीं करता है ... क्या आप व्याख्या करके मेरी मदद कर सकते हैं? –

+0

'कुंजी' गणना की जाने वाली वस्तु की संपत्ति नहीं है। @ ब्रायन लर्नन: उनका मतलब 'ऑब्जेक्ट.कीज (ओबीजे.डाटा)। लम्बाई' था। वैसे भी एक डुप्ली के रूप में बंद किया जाना चाहिए :-) – Bergi

+0

मेरे लिए यह जवाब है। लॉनाश जैसी लाइब्रेरी जोड़ना समाधान का हिस्सा नहीं है। इसके अलावा आप अपेक्षित क्रम में आउटपुट के लिए 'इन इन लूप' पर भरोसा नहीं कर सकते हैं। – BenRacicot

18

प्रयास करें Demo Here

var list ={}; var count= Object.keys(list).length; 
+4

आपको समाधान को दोबारा पोस्ट करने के बजाय अन्य उत्तरों को ऊपर उठाना चाहिए :-) – Bergi

+4

जब मैंने डेमो बनाना शुरू किया, तो किसी ने भी यह जवाब नहीं दिया था। – Sudarshan

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