2013-01-02 6 views
6

मान लीजिए कि मिश्रित वस्तुओं और सरणी के साथ मेरे पास एक जटिल जेसन ऑब्जेक्ट एक्स है। वहाँ अगर एक चर अशक्त या इस वस्तु के भीतर अपरिभाषित है की जाँच करने के लिए एक सरल या सामान्य तरीके से है, जैसे:कई इंटरमीडिएट चेक की आवश्यकता के बिना नेस्टेड JSON/ऑब्जेक्ट वैल्यू प्राप्त करें?

if(x.a.b[0].c.d[2].e!=null) .... 
बजाय

सामान्य रूप से जाँच सभी माता पिता क्षेत्रों

if(x.a!=null 
&& x.a.b!=null 
&& x.a.b[0]!=null 
&& x.a.b[0].c!=null 
&& x.a.b[0].c.d!=null 
&& x.a.b[0].c.d[2]!=null 
&& x.a.b[0].c.d[2].e!=null) .... 
+0

(जाँच हो रही है के लिए करता है, तो अंतिम मान अपरिभाषित है/बातिल सिर्फ संपूर्ण कार्य का एक सबसेट है।) –

+0

मैं इस सवाल में किसी भी JSON नहीं दिख रहा है ... –

उत्तर

6
try { 
    if(x.a.b[0].c.d[2].e!=null) 
    //.... 
} catch (e) { 
    // What you want 
} 

Live DEMO

+2

@SayemAhmed और याद आती है 'FALSE' और '0' और' "मामला! O.o –

3

यहां एक ऐसा संस्करण है जिसे अपवाद हैंडलिंग की आवश्यकता नहीं है .. क्या यह तेज़ होगा? मुझे शक है। क्या यह क्लीनर होगा? खैर, यह व्यक्तिगत वरीयता पर निर्भर करता है .. बेशक यह सिर्फ एक छोटा सा प्रदर्शन प्रोटोटाइप है और मुझे यकीन है कि अस्तित्व में पहले से ही "जेएसओएन क्वेरी" पुस्तकालय बेहतर हैं।

// returns the parent object for the given property 
// or undefined if there is no such object 
function resolveParent (obj, path) { 
    var parts = path.split(/[.]/g); 
    var parent; 
    for (var i = 0; i < parts.length && obj; i++) { 
     var p = parts[i]; 
     if (p in obj) { 
      parent = obj; 
      obj = obj[p]; 
     } else { 
      return undefined; 
     } 
    } 
    return parent; 
} 

// omit initial parent/object in path, but include property 
// and changing from [] to . 
var o = resolveParent(x, "a.b.0.c.d.2.e"); 
if (o) { 
    // note duplication of property as above method finds the 
    // parent, should it exist, so still access the property 
    // as normal 
    alert(o.e); 
} 
+0

काम नहीं करता है [] में एक चर है I। – konghou

+0

@ कोंगहौ वास्तव में - यह उत्पादन-योग्य पर विचार करने से बहुत दूर है! मैं शायद अधिकतर, गुणों को पुन: स्थापित करने के एक दृष्टिकोण को दिखाने में रूचि रखता था। –

+0

+1, बहुत अच्छा! (लेकिन केवल सीखने के उद्देश्य के लिए)। – gdoron

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