0

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

const link = $("#link").val();
const state = $("#state").val(); etc...

然后返回对象:

const departmentObject = {
  position,
  name,
  link,
  state,
  requirements: {
    age,
    citizenship,
    degree
  },
  salary,
  description
};

我将对象传递给我正在验证其内容的后续函数。由于主对象内的对象,我无法验证这一点requirements。我从一个 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);
  }
}

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

4

2 回答 2

0

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

function findMissingKeys(obj, keyPath = null, missingKeys = []) {  
  for(let key in obj) {
    if (typeof obj[key] === 'object') {
      findMissingKeys(obj[key], key, missingKeys)
    } else if (obj[key] === "") {
      if (keyPath) {
        missingKeys.push(`${keyPath}.${key}`);
      } else {
        missingKeys.push(key);
      }
    }
  }
  return missingKeys
}

function validateDepartment() {
  try {
    const textArea = document.getElementById("textArea")
    const departmentObject = JSON.parse(textArea.value)
    const missingKeys = findMissingKeys(departmentObject)
    console.log({ missingKeys })
  } catch(e) {
    alert(e)
  }
}

validateDepartment()
<h4>Department Validator</h4>
<textarea id="textArea" cols=50 rows=10>
  {
    "position": "",
    "name": "",
    "link": "",
    "state": "",
    "requirements": {
      "age": "",
      "citizenship": "",
      "degree": ""
    },
    "salary": "",
    "description": ""
  }
</textarea>
<hr>
<button onclick="validateDepartment()">
  Validate
</button>

于 2018-07-14T02:37:01.200 回答
0

对于嵌套对象的验证,您可以在 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);

    }

脚步 :

  1. 从对象中获取密钥
  2. 检查键的值是否不是银行
  3. 如果是,则将其添加到 missingBoxes 数组。
  4. 如果不是,则检查这是否是一个对象。
  5. if 对象再次调用检查方法。
于 2018-07-14T02:41:07.073 回答