我试图从对象中删除值为空或null或未定义的属性。我可以删除第一级属性的属性。但是某些场景属性可能包含另一个对象,该对象可能包含另一个对象。所以几乎像LINKED LIST。但我不知道如何找到二级对象属性值。
例如
{
prop1: "value1",
prop2: {
secLevlProp1: "value1",
secLevlProp2: null,
secLevlProp3: {
secLev2Prop1: "value1",
secLev2Prop2: "value2",
secLev2Prop3: {
secLev3Prop1: "value1",
secLev3Prop2: "",
secLev3Prop3: "value3",
}
},
}
prop3: [
{ arrProp: "values", arrProp1: "" },
{ arrProp: "values2", arrProp1: "values4" },
],
prop4: "undefined",
prop5: "value1",
}
从上面的对象预期输出
{
prop1: "value1",
prop2: {
secLevlProp1: "value1",
secLevlProp3: {
secLev2Prop1: "value1",
secLev2Prop2: "value2",
secLev2Prop3: {
secLev3Prop1: "value1",
secLev3Prop3: "value3",
}
},
}
prop3: [
{ arrProp: "values" },
{ arrProp: "values2", arrProp1: "values4" },
],
prop5: "value1",
}
这是我试过的
Object.keys(myObj).forEach(prop=> {
if (myObj[prop] === '' || myObj[prop] === null || myObj[prop] === undefined) {
delete myObj[prop];
}
});
这在第一级属性上工作正常,但我应该如何在上面的格式对象上的链表概念上应用上面的代码。请有人帮我解决这个问题。
答案 0 :(得分:1)
你可以像这样递归地执行:
const deleteProperties = obj => {
Object.keys(obj).forEach(prop => {
if (obj[prop] === '' || obj[prop] === null || obj[prop] === undefined) {
delete obj[prop];
} else if (typeof obj[prop] === 'object') {
deleteProperties(obj[prop]);
}
});
}
在您的示例中,prop4
不会被删除,因为它是string