javascript - 检查对象中的嵌套数组是否包含空值
问题描述
考虑以下对象:
{
"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
是上面的对象。
想法?
解决方案
您可以检查 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));
推荐阅读
- django - Django - 对嵌套序列化对象的更新操作(多对多)
- python - 使用通用条目合并 json 数组
- javascript - v-on 处理程序中的错误:“FirebaseError: [code=invalid-argument]: Function CollectionReference.doc()
- python - 尝试重新定位 geopandas 图例时出现错误“没有带有标签的句柄”
- php - 在php中读取文件时显示问题
- react-native - React-native-camera,如果用户拒绝相机权限,则运行一个函数
- python - 无法使用 python 请求抓取 cgi 图像
- arduino - Arduino 未注册来自 STM32F407 的 SPI 传输
- arrays - 计算属性差异
- cassandra - Cassandra 虚拟节点