2012-01-17 40 views
28

Tôi đã thực hiện xác thực AJAX và thư được xác thực được trả về dưới dạng mảng JSON. Vì vậy, tôi cần phải kiểm tra xem các phím, như nameemail, có nằm trong mảng JSON đó không.Kiểm tra xem khóa có tồn tại trong mảng JSON không bằng cách sử dụng JQuery

{"name":{"isEmpty":"Value is required and can't be empty"}, 
"email":{"isEmpty":"Value is required and can't be empty"}} 

Chỉ khi có tên khóa, tôi cần viết thông báo lỗi đến trường name. Sau đây là đoạn code để hiển thị một lỗi nếu các lĩnh vực được nhập

if(obj['name']'isEmpty']!=""){         
$('#name').after(c1+"<label class='error'>"+ obj['name']['isEmpty']+"</label>"); 
}          
if(obj['email']['isEmpty']!=""){ 
     $('#email').after(c4+"<label class='error'>"+ obj['email']['isEmpty']+"</label>"); 
} 

Nhưng nếu trường name được nhập vào, nó sẽ không có trong mảng JSON. Vì vậy, tuyên bố kiểm tra if(obj['name']['isEmpty']!="") sẽ dẫn đến lỗi obj.name not found.

Không cần phải có khóa name trong mảng. Đồng thời tôi cần kiểm tra điều này để hiển thị lỗi nếu mảng sở hữu khóa name.

Trả lời

76

sử dụng javascript là hasOwnProperty chức năng,

if(json_object.hasOwnProperty('name')){ 
//do struff 
} 
+0

nó trả về false hoặc trường hợp mảng có khóa 'tên' cũng không có phím 'name'.according cho người dùng điền vào mẫu có elemnts tên hoặc email – nidhin

+0

nó trở lại đúng là chìa khóa tồn tại và sai nếu không tồn tại – Dau

+0

@ Dầu, để hoàn thành, nó thực sự kiểm tra xem các tài sản được cung cấp tồn tại trên đối tượng đó tại liên kết của nó trong chuỗi nguyên mẫu của nó. Vì javascript là nguyên mẫu, các đối tượng khác có thể mở rộng từ các đối tượng khác bằng cách kế thừa nguyên mẫu của chúng. Việc kiểm tra 'hasOwnProperty' đảm bảo bạn không" nạo vét "các mục từ cao hơn trong chuỗi nguyên mẫu của đối tượng. – Vinay

12

Không cần JQuery chỉ đơn giản là bạn có thể làm

if(yourObject['email']){ 
// what if this property exists. 
} 

như với bất kỳ giá trị cho email sẽ đưa bạn trở true, nếu không có tài sản đó hoặc giá trị tài sản là null hoặc undefined sẽ dẫn đến false

+4

Điều gì sẽ xảy ra nếu giá trị của 'email' là' 0' hoặc 'sai' hoặc chuỗi rỗng? Các tài sản không tồn tại, nhưng điều này sẽ nói nó không. –

+0

Điều này cũng sẽ dẫn đến kết quả dương tính giả cho những thứ như 'yourObject ['toString']'. Sử dụng 'hasOwnProperty'. –

+0

kết quả hasownproperty sai mặc dù tên exisit hoặc không – nidhin

10
if(typeof theObject['key'] != 'undefined'){ 
    //key exists, do stuff 
} 

//or 

if(typeof theObject.key != 'undefined'){ 
    //object exists, do stuff 
} 

Tôi đang viết ở đây bởi vì không ai có vẻ để cung cấp cho câu trả lời đúng ..

Tôi biết đó là cũ ...

Ai đó có thể đặt câu hỏi về điều tương tự ..

0

nếu bạn có một mảng

var subcategories=[{name:"test",desc:"test"}]; 

function hasCategory(nameStr) { 
     for(let i=0;i<subcategories.length;i++){ 
      if(subcategories[i].name===nameStr){ 
       return true; 
      } 
     } 
     return false; 
    } 

nếu bạn có một đối tượng

var category={name:"asd",test:""}; 

if(category.hasOwnProperty('name')){//or category.name!==undefined 
    return true; 
}else{ 
    return false; 
} 
Các vấn đề liên quan