Javascript Can';无法在对象中验证对象

Javascript Can';无法在对象中验证对象,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,对象的值通过以下方式获取: const link = $("#link").val(); const state = $("#state").val(); etc... 然后返回该对象: const departmentObject = { position, name, link, state, requirements: { age, citizenship, degree }, salary, description }; 我将对

对象的值通过以下方式获取:

const link = $("#link").val();
const state = $("#state").val(); etc...
然后返回该对象:

const departmentObject = {
  position,
  name,
  link,
  state,
  requirements: {
    age,
    citizenship,
    degree
  },
  salary,
  description
};
我将对象传递给后续函数,在该函数中验证其内容。由于主对象中的对象
需求
,我在验证此项时遇到问题。我从一个IF语句开始:

let missingBoxes = [];
const array = Object.keys(departmentObject);
const subArray = Object.keys(departmentObject.requirements);

for (let i = 0; i < array.length; i++) {
  keyname = array[i];
  if (departmentObject[keyname] !== "") {
    console.log("box not empty");
  } else {
    console.log("box empty, push to missingBoxes");
    missingBoxes.push(keyname);
  }
}
let missingboxs=[];
常量数组=Object.keys(departmentObject);
常量子数组=Object.key(departmentObject.requirements);
for(设i=0;i

然后我做了一个子数组来测试
departmentObject.requirements
独立,但显然
requirements
仍然在原始departmentObject中。我需要一个if语句,或者两个单独的语句

您可以使用递归来处理嵌套的需求对象

函数findmisingkeys(obj,keyPath=null,missingKeys=[]){
用于(输入obj){
如果(对象的类型[键]=“对象”){
FindAdministringKeys(obj[key],key,missingKeys)
}否则如果(对象[键]=“”){
if(键路径){
missingKeys.push(`${keyPath}.${key}`);
}否则{
缺少键。按(键);
}
}
}
返回丢失的密钥
}
函数validateDepartment(){
试一试{
const textArea=document.getElementById(“textArea”)
const departmentObject=JSON.parse(textArea.value)
const missingKeys=findmisingkeys(departmentObject)
console.log({missingKeys})
}捕获(e){
警报(e)
}
}
validateDepartment()
部门验证程序
{
“职位”:“,
“名称”:“,
“链接”:“,
“国家”:“,
“要求”:{
“年龄”:“,
“公民身份”:“,
“学位”:”
},
“薪金”:“,
“说明”:”
}

验证
要验证嵌套对象,可以在For循环中使用递归

function check(obj){
    var keys = Object.keys(obj);
    var missingBoxes = [];
    for(let i=0; i<keys.length; i++){
        if(obj[keys[i]]!== ''){
            if(obj[keys[i]].constructor === {}.constructor){
                check(obj[keys[i]]);
             }
        }else{
            missingBoxes.push(keys[i]);
           console.log('blank')
         }
    }
    console.log(missingBoxes);

    }
功能检查(obj){
var keys=Object.keys(obj);
var missingboxs=[];

对于(让i=0;ian解释会帮我很大的忙check没有定义First line function check正在定义它。所以这应该不是问题。你是在函数体上复制的。那样的话,你会得到那个错误。天哪,这很有效!!稍微调整一下,但我有一个干净的数组中的所有框。肯定会阅读递归函数。比k you@manoj yadavone问题,我以前没有见过
.constructor==={}.constructor
。它扮演什么角色?检查值的类型。你可以在这里找到更多信息,也可以在这里找到更多信息。