如何通过与另一个对象进行比较从对象中删除空对象
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)
我想通过与另一个对象进行比较,从另一个对象中删除所有空对象。这方面的例子是:
我们有如下默认对象:
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)