2016-04-24 10 views
0

Ich habe ein Objekt wie folgt aus:Überprüfen Sie, dass Array von Objekten hat alle erforderlichen Schlüssel

var field_arr = [{name:name},{email:email},{tel:tel}]; 

Wie den Wert der Name, E-Mail oder Telefon (Eigenschaftsschlüssel) zu bekommen? Ich möchte eine Schleife verwenden, um dem Benutzer mitzuteilen, was fehlt. Wenn zum Beispiel der Benutzer tel verpasst hat, wird eine Warnung angezeigt, die lautet: tel is missing.

+0

mit required Felder vergleichen Could Sie verwenden kein einzelnes Objekt? Dann wäre es einfach, einmal durch "Object.keys" zu gehen. –

+0

Angenommen, dies ist für ein Formular, würde ich definitiv das 'required' Attribut verwenden. – powerbuoy

Antwort

1

Ich glaube nicht, dass Sie es brauchen, um ein Array zu sein. Wiederholen Sie einfach alle Eigenschaften Ihres JSON-Objekts. zu

var obj = { 
    name: "name", 
    email: "", 
    tel: "tel" 
}; 
$.each(obj, function(key, value) { 
    if (value == "") { 
    console.log(key + ": " + value); 
    } 

}); 
+0

in pure js ohne $ .Eachhalte ich stattdessen 'for (key in obj)' statt. – Jennifer

+0

Verwenden Sie 'for (Schlüssel in obj)' nicht, besonders ohne '.hasOwnProperty' Guard. Verwenden Sie stattdessen 'Object.keys (obj)'. – Ginden

+1

Wenn 'obj' überhaupt keinen Schlüssel hat wie' var obj = {name: "name", tel: "tel"}; 'wird nicht protokolliert. Es gibt keine Validierung gegen irgendetwas und nur überprüfen, ob 'obj' irgendwelche leeren Werte hat. Überprüfen Sie meine Lösung. –

0

Sie wollen:

  • schalten Sie field_arr Objekt in einen Schlüssel => Wert Typ Objekt
  • dann Schleife auf Ihrer gewünschten Liste zu überprüfen, dass jedes Element ein Schlüssel in diesem Objekt:

Code:

var arr = {}; 
for(var i=0; i<field_arr.length; i++){ 
    var key = Object.keys(field_arr[i])[0]; 
    arr[key] = field_arr[i][key]; 
} 

// At this point you have a key => value type array in "arr" 

var required_list = ["name", "email", "tel"]; 
for(var i=0; i<required_list.length; i++){ 
    var item = required_list[i]; 
    if(! item in arr) { 
    alert(item+" is missing"); 
    } 
} 

Wenn Sie for-Schleife anstelle eines forEach verwenden:

var arr = {}; 
field_arr.forEach(function(obj){ 
     var key = Object.keys(obj)[0]; 
     arr[key] = obj[key]; 
    }); 
} 

// At this point you have a key => value type array in "arr" 

var required_list = ["name", "email", "tel"]; 
required_list.forEach(function(item){ 
    if(! item in arr) 
     alert(item+" is missing"); 
}); 
0

Sie speichern die Werte von einigen Feldern mit jQuery oder etwas anderes anzunehmen. Sie können etwas tun:

var field_arr = [{name:"name"},{email:""},{tel:"lol"}]; 
jQuery.each(field_arr,function(obj){ 
     for (var i in obj) { 
      if (obj[i].trim() === "") { 
       console.log(i + " is missing"); 
      } 
     } 
}); 
0

filed_arr Unter der Annahme, ist eine Benutzereingabe und Sie können die Form nicht ändern, und Sie wollen es

var field_arr = [{name:'abc'},{email:'xyz'}]; 
 

 
var required = ['name', 'email' , 'tel']; 
 

 
var inputKeys = field_arr.reduce(function(prev,next){ 
 
    return prev.concat(Object.keys(next)); 
 
},[]); 
 

 
document.write('<pre>inputKeys => ' +inputKeys+'</pre>'); 
 

 
var missingKeys = required.filter(function(key){ 
 
    return inputKeys.indexOf(key) == -1; 
 
}); 
 

 
document.write('<pre>missingKeys => ' +missingKeys+'</pre'); 
 

 
alert('You are missing '+missingKeys);

Verwandte Themen