2012-01-17 5 views
28

He realizado la validación AJAX y el mensaje validado se devuelve como una matriz JSON. Por lo tanto, necesito verificar si las claves, como name y email, están en esa matriz JSON.Compruebe si la clave existe en la matriz JSON usando JQuery

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

Sólo si el nombre de la clave está presente, tengo que escribir un mensaje de error al campo name. siguiente es el código para mostrar un error si se introducen campos

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>"); 
} 

Pero si se introduce el campo name, no estarán en matriz JSON. Por lo tanto, la afirmación de comprobación if(obj['name']['isEmpty']!="") dará como resultado un error obj.name not found.

No es necesario tener la clave name en la matriz. Al mismo tiempo, necesito verificar que esto muestre el error si la matriz posee la clave name.

Respuesta

76

uso JavaScript de hasOwnProperty función,

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

devuelve falso cualquiera de los casos de la matriz tiene la clave 'nombre' ni tiene la clave 'nombre'. Según el usuario el formulario de relleno la matriz tiene elemnts nombre o correo electrónico – nidhin

+0

devuelve verdadero es la clave existe y falso si no existe – Dau

+0

@ Dau, para estar completo, realmente verifica si la propiedad suministrada existe en ese objeto en su enlace en su cadena de prototipo. Como javascript es prototípico, otros objetos pueden extenderse desde otros objetos al heredar su prototipo. Verificando 'hasOwnProperty' asegura que no estás" dragando "elementos desde lo alto en la cadena de prototipos de un objeto. – Vinay

12

No hay necesidad de JQuery simplemente le puede hacer

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

como con cualquier valor por email lo regresará true, si no existe tal propiedad o que el valor de propiedad es null o undefined resultará en false

+4

¿Qué sucede si el valor de 'email' es' 0', o 'false', o una cadena vacía? La propiedad existe, pero esto dirá que no. –

+0

Esto también dará como resultado un falso positivo para cosas como 'yourObject ['toString']'. Use 'hasOwnProperty'. –

+0

hasownproperty resultado falso a pesar del nombre exisit o no – nidhin

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

//or 

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

que estoy escribiendo aquí porque nadie parece dar la respuesta correcta ..

Sé que es viejo ...

Alguien podría preguntar lo mismo ..

0

si tiene una matriz

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; 
    } 

si tiene un objeto

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

if(category.hasOwnProperty('name')){//or category.name!==undefined 
    return true; 
}else{ 
    return false; 
} 
Cuestiones relacionadas