【问题标题】:How to remove properties from Object Jasvscript?如何从 Object Javascript 中删除属性?
【发布时间】:2018-10-05 18:26:00
【问题描述】:

我试图从对象中删除值为空、空或未定义的属性。我能够删除第一级属性的属性。但是某些场景属性可能包含另一个对象,并且该对象可能包含另一个对象。所以几乎就像链接列表。但我不确定如何找到二级对象属性值。

例如

{
  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];
            }
        });

这在第一级属性上运行良好,但我应该如何将上述代码应用于上述格式对象的链表概念。请有人帮我解决这个问题。

【问题讨论】:

    标签: javascript typescript ecmascript-6 ecmascript-5


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-06
      • 2010-09-17
      • 1970-01-01
      • 2019-06-03
      相关资源
      最近更新 更多