2012-11-23 9 views
8

मैं परिवर्तनीय गहराई वाले अनुमति प्रणाली पर काम कर रहा हूं; किसी पृष्ठ की जटिलता के आधार पर, कम या ज्यादा स्तर हो सकते हैं। मैंने StackOverflow की खोज की है कि यह पहले से पूछा गया है, इसे नहीं मिला।किसी ऑब्जेक्ट की गहराई की जांच कैसे करें?

यदि मैं यह वस्तु है: मैं इसे 3 लौटना ही होगा

{foo:{bar:{baz : 'baa'}}} 

, तो यह उससे 3 स्तर हैं।

इस वस्तु के साथ

:

{abc: 'xyz'} 

यह होना करने के लिए 1.

यह वही है मैं अब तक किया है होगा:

utils.depthOf = function(object, level){ 
    // Returns an int of the deepest level of an object 
    level = level || 1; 

    var key; 
    for(key in object){ 
     if (!object.hasOwnProperty(key)) continue; 

     if(typeof object[key] == 'object'){ 
      level++; 
      level = utils.depthOf(object[key], level); 
     } 
    } 

    return level; 
} 

समस्या यह है कि यह बहुत बहन तत्वों गिना जाता है। यह वास्तव में गहराई से नहीं हो रहा है, यह किसी ऑब्जेक्ट के सभी सदस्यों की गिनती कर रहा है।

उत्तर

16

ठीक है, यहां आप दोस्त जाते हैं, एक ऐसा फ़ंक्शन जो आपको वही करता है जो आपको चाहिए!

utils.depthOf = function(object) { 
    var level = 1; 
    var key; 
    for(key in object) { 
     if (!object.hasOwnProperty(key)) continue; 

     if(typeof object[key] == 'object'){ 
      var depth = utils.depthOf(object[key]) + 1; 
      level = Math.max(depth, level); 
     } 
    } 
    return level; 
} 

हमने सोचा कि यह बहुत आसान होगा। मुद्दा यह था कि इसे कैसे बढ़ाया गया था, इसे दोबारा जोड़ना और एक जोड़ना, फिर दो भाई बहनों के बीच अधिकतम चुनना नहीं था।

+0

इस फ़ंक्शन में तर्क "स्तर" क्या है? –

+0

यह 'utils.depthOf ({})' कहकर बुलाया जाएगा - दूसरा पैरामीटर केवल रिकर्सन के लिए उपयोग किया जाता है, यही कारण है कि दूसरी पंक्ति कह रही है "स्तर स्तर के बराबर है यदि स्तर झूठा नहीं है, यदि स्तर गलत है, स्तर एक है " –

+1

एक तरफ, यह फ़ंक्शन वास्तव में काम नहीं करता है। यदि बहन तत्व हैं, तो यह उन्हें "चौड़ाई" की बजाय गहराई से गिना जाता है। - मैं अभी भी उस पर काम कर रहा हूं। –

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