如何通过与另一个对象进行比较从对象中删除空对象

How to remove empty objects from object by comparing with another object

我想通过与另一个对象进行比较,从另一个对象中删除所有空对象。这方面的例子是:

我们有如下默认对象:

defaultObj = {
  a: {},
  b: {},
  c: {
    d: {}
  }
};

目标对象是这样的:

targetObj = {
  a: { x: {} },
  b: {},
  c: {
    d: {},
    e: {}
  },
  f: {}
};

现在,我需要对targetObj 进行操作,将其与defaultObj 进行比较,并删除所有保持为空的对象,但保留targetObj 中原本不是default 的所有对象。 操作结果应如下所示:

result = {
  a: { x: {} },
  c: {
    e: {}
  },
  f: {}
}

这是一个您可以使用的解决方案,它递归地迭代一个对象并删除您的用例中定义的空属性。确保首先创建对象的深层副本(如示例中所示),以便原始对象不会被操纵:

const defaultObj = {
  a: {},
  b: {},
  c: {
    d: {}
  }
};

const targetObj = {
  a: { x: {} },
  b: {},
  c: {
    d: {},
    e: {}
  },
  f: {}
};

// traverse the object
function removeEmptyObjectProperties(targetObject, defaultObject) {
  Object.keys(targetObject).forEach((key) => {
    if (defaultObject.hasOwnProperty(key)) {
      // checks if it is a json object and has no keys (is empty)
      if (targetObject.constructor === ({}).constructor && Object.keys(targetObject[key]).length === 0) {
        delete targetObject[key];
      } else {
        // iterate deeper
        removeEmptyObjectProperties(targetObject[key], defaultObject[key]);
      }
    }
  })
}

// deep copy to remove the reference
const targetObjDeepCopy = JSON.parse(JSON.stringify(targetObj));
// execute
removeEmptyObjectProperties(targetObjDeepCopy, defaultObj);
// result
console.log(targetObjDeepCopy)