在包含 Json、数组和任何其他数据类型的对象中查找 null/undefined 或空值的最佳方法是什么?
一种替代方法是使用字符串搜索,但我不确定这是否是一种好的做法:
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}]"
它忽略了 json 中的 quz: undefined
。
最佳答案
这有点 hacky,但一个选择是使用 JSON.stringify
和一个函数来检查被字符串化的值是 null
还是 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));
关于javascript - 如何在对象的对象中找到空值/未定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57862744/