Как удалить свойства из Object Jasvscript? - PullRequest
0 голосов
/ 25 апреля 2018

Я пытался удалить свойства, которые имеют значение пустое или нулевое или неопределенное из объекта. Я могу удалить свойства свойств первого уровня. Но некоторые свойства сценария могут содержать другой объект, а этот объект может содержать другой объект. Так почти как СВЯЗАННЫЙ СПИСОК. Но я не уверен, как найти значения свойств объекта второго уровня.

Например

{
  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 голосов
/ 25 апреля 2018

Вы можете сделать это рекурсивно следующим образом:

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

...