首页 > 解决方案 > 检查对象中的嵌套数组是否包含空值

问题描述

考虑以下对象:

{
  "params": {
    "time_to_diagnosis": [
      {
        "field": "date_of_diagnosis",
        "value": ""
      },
      {
        "field": "date_of_symptom_onset",
        "value": "2019-09-01"
      }
    ],
    "time_since_onset": [
      {
        "field": "date_of_symptom_onset",
        "value": "2019-09-01"
      }
    ]
  }
}

正如你所知道的,这是一个对象,它们本身包含对象的数组的对象。

如您所见,有些键是空的。

这个想法是,如果包含对象的数组中没有空键,则返回 true,否则返回 false。

这是我写的:

const isParamsInAjaxParamsEmpty = (paramsForAjaxCall) => {
  for (const key in paramsForAjaxCall) {
    for (const nestedKey in paramsForAjaxCall[key]) {
      const params = paramsForAjaxCall[key];

      if (params[nestedKey] === "") {
        return true;
      }
    }
  }

  return false;
}

我知道我可以Array.isArray在 nestedKey 部分上做一个,但我不确定如何使这个递归,因为可能有一个或多个数组。

paramsForAjaxCall是上面的对象。

想法?

标签: javascriptecmascript-6

解决方案


您可以检查 not object 并返回 false,然后检查想要的属性或迭代所有属性。

function check(object) {
    if (!object || typeof object !== 'object') return false;
    if (object.value) return true;
    return Object.values(object).every(check);
}

var object = { params: { time_to_diagnosis: [{ field: "date_of_diagnosis", value: "" }, { field: "date_of_symptom_onset", value: "2019-09-01" }], time_since_onset: [{ field: "date_of_symptom_onset", value: "2019-09-01" }] } }

console.log(check(object));

object.params.time_to_diagnosis[0].value= "foo";
console.log(check(object));


推荐阅读