javascript - 如何在对象的对象中找到空/未定义的值
问题描述
在包含 Json、数组和任何其他数据类型的对象中查找空值/未定义或空值的最佳方法是什么?
一种替代方法是使用字符串搜索,但我不确定这是否是一种好习惯:
myObject = [{foo: 10, bar: 'NY'}, 123, [null, 11, '', 22], undefined, {baz: 99, quz: undefined}];
function containsInvalidValue(object) {
myString = JSON.stringify(object);
console.log(myString);
let containsNull = myString.search("null"),
containsUndefined = myString.search("undefined"),
containsEmpty = myString.search("\"\""),
containsInvalidValue = containsNull + containsUndefined + containsEmpty;
if(containsInvalidValue < 0)
return false;
else
return true;
}
console.log(containsInvalidValue(myObject));
这种方法的第一个问题是JSON.stringify()
不会将undefined
字段包含到 json 对象中。因此,该JSON.stringify(object)
行返回以下内容:
"[{"foo":10,"bar":"NY"},123,[null,11,"",22],null,{"baz":99}]"
它忽略quz: undefined
了json中的。
解决方案
这有点 hacky,但一种选择是使用JSON.stringify
一个函数来检查被字符串化的值是null
or undefined
:
const myObject = [{foo: 10, bar: 'NY'}, 123, [null, 11, '', 22], undefined, {baz: 99, quz: undefined}];
function containsInvalidValue(object) {
let hasNullOrUndef = false;
JSON.stringify(object, (key, val) => {
if (val === null || val === undefined) {
hasNullOrUndef = true;
}
return val;
});
return hasNullOrUndef;
}
console.log(containsInvalidValue(myObject));
或者手动递归迭代:
const myObject = [{foo: 10, bar: 'NY'}, 123, [null, 11, '', 22], undefined, {baz: 99, quz: undefined}];
const check = (val) => {
if (val === null || val === undefined) {
return true;
}
if (typeof val !== 'object') {
return false;
}
for (const item of Object.values(val)) {
if (check(item)) {
return true;
}
}
return false;
};
console.log(check(myObject));
推荐阅读
- java - Android Firebase,从 firebase 数据库中检索数据
- .net-core - Unix 上的 net core 启动过程
- c# - 如何将具有 int、字符串属性的对象列表转换为具有所有字符串属性的对象列表
- oracle - 将递增日期插入单独的选择查询
- r - R:查找丢失的数据并将其添加为零
- c# - JSON 对象创建 PushStreamContent
- wordpress - 将 WP 插件更新到主干或特定版本
- spring - 错误:操作:考虑在配置中定义“包”类型的 bean
- java - 我想在 java 中使用图形和事件处理
- deep-learning - Caffe Multilabel 未按预期工作