如何检查对象的子对象(及其子对象、无限级别)是否未定义?

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.' } }
}