如何检查对象的子对象(及其子对象、无限级别)是否未定义?
How do I check if an object's children (and their children, infinite levels) are undefined?
给定以下对象,我想创建一个函数来确定树中的任何字段是否具有未定义的值。我需要函数在检查未定义时无限遍历(或遍历这棵对象树)。
myObject: {
myCoolField: "Here is my value.",
myAwesomeField: undefined,
myRadField: {
radA: true,
radB: false,
radC: {
anotherOne: undefined,
yetAnother: 'A random string.'
}
}
}
我尝试过利用 for (const [key, value] of Object.entries(myObject))
,但我只能用它来检查第一级字段。
您可以递归检查对象树并使用 undefined
键做任何您想做的事。
function fn(object) {
if (typeof object === 'undefined') {
// do something
return;
}
for (let key in object) {
if (typeof object[key] === 'undefined') {
// do something
delete object[key]; // delete undefined if you want
}
if (typeof object[key] === 'object') {
// do something
fn(object[key]); // recursive call to check undefined values
}
}
};
输入:
const myObject= {
myCoolField: "Here is my value.",
myAwesomeField: undefined,
myRadField: {
radA: true,
radB: false,
radC: {
anotherOne: undefined,
yetAnother: 'A random string.'
}
}
}
输出:
{
myCoolField: 'Here is my value.',
myRadField: { radA: true, radB: false, radC: { yetAnother: 'A random string.' } }
}
给定以下对象,我想创建一个函数来确定树中的任何字段是否具有未定义的值。我需要函数在检查未定义时无限遍历(或遍历这棵对象树)。
myObject: {
myCoolField: "Here is my value.",
myAwesomeField: undefined,
myRadField: {
radA: true,
radB: false,
radC: {
anotherOne: undefined,
yetAnother: 'A random string.'
}
}
}
我尝试过利用 for (const [key, value] of Object.entries(myObject))
,但我只能用它来检查第一级字段。
您可以递归检查对象树并使用 undefined
键做任何您想做的事。
function fn(object) {
if (typeof object === 'undefined') {
// do something
return;
}
for (let key in object) {
if (typeof object[key] === 'undefined') {
// do something
delete object[key]; // delete undefined if you want
}
if (typeof object[key] === 'object') {
// do something
fn(object[key]); // recursive call to check undefined values
}
}
};
输入:
const myObject= {
myCoolField: "Here is my value.",
myAwesomeField: undefined,
myRadField: {
radA: true,
radB: false,
radC: {
anotherOne: undefined,
yetAnother: 'A random string.'
}
}
}
输出:
{
myCoolField: 'Here is my value.',
myRadField: { radA: true, radB: false, radC: { yetAnother: 'A random string.' } }
}