2013-01-02 23 views
6

giả sử tôi có một đối tượng json phức tạp x với các đối tượng hỗn hợp và mảng. Có cách nào đơn giản hay tổng quát để kiểm tra xem một biến là null hoặc không xác định trong phạm vi đối tượng này, chẳng hạn như:Nhận giá trị JSON/đối tượng lồng nhau mà không cần nhiều kiểm tra trung gian?

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

thay vì bình thường kiểm tra tất cả các lĩnh vực mẹ

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

(Kiểm tra nếu giá trị cuối cùng là undefined/null chỉ là một tập hợp con của toàn bộ công việc.) –

+0

Tôi không thấy bất kỳ JSON trong câu hỏi này ... –

Trả lời

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

Live DEMO

+2

@SayemAhmed Và bỏ lỡ 'false' và '0' và' "" 'trường hợp! O.o –

3

Đây là một biến thể không yêu cầu xử lý ngoại lệ .. nó sẽ nhanh hơn? Tôi nghi ngờ điều đó. Nó sẽ sạch hơn? Vâng, điều đó phụ thuộc vào sở thích cá nhân .. tất nhiên đây chỉ là một mẫu thử nghiệm nhỏ và tôi chắc chắn có các thư viện "truy vấn JSON" tốt hơn đã tồn tại.

// 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

không hoạt động nếu [] chứa biến i. – konghou

+0

@konghou Thật vậy - đây là cách xa những gì tôi sẽ xem xét sản xuất xứng đáng! Tôi đã, có lẽ quá mức, quan tâm đến việc thể hiện một cách tiếp cận của việc lặp lại các thuộc tính. –

+0

+1, Rất đẹp! (nhưng chỉ cho mục đích học tập). – gdoron