簡體   English   中英

檢查對象數組是否具有所有必需的鍵

[英]Check that array of objects has all required keys

我有一個這樣的對象:

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

如何獲取名稱,電子郵件或電話(屬性密鑰)的值? 我想使用一個循環來提示用戶缺少什么。 例如,如果用戶錯過了電話,將會有一條警報說tel is missing

我認為您不需要將其作為數組。 只需遍歷JSON對象的所有屬性即可。

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

 });

你想要 :

  • 將您的field_arr對象變成鍵=>值類型對象
  • 然后在所需列表上循環以檢查每個項目是否是該對象中的鍵:

代碼:

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

如果要使用forEach而不是for循環:

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

假設您正在使用jQuery或其他方式存儲某些字段中的值。 您可以執行以下操作:

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

假設filed_arr是用戶輸入,並且您無法更改其形式,並且想要將其與required字段進行比較

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM