如何从Object Jasvscript中删除属性?

时间:2018-04-25 10:07:43

标签: javascript typescript ecmascript-6 ecmascript-5

我试图从对象中删除值为空或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];
            }
        });

这在第一级属性上工作正常,但我应该如何在上面的格式对象上的链表概念上应用上面的代码。请有人帮我解决这个问题。

1 个答案:

答案 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