2017-09-01 3 views
0

Je tente d'enlever tout objet vide et tableau de mon objet json en utilisant lodash dans angular2 mais sans analyser correctement l'objet.Suppression récursive de l'objet vide et du tableau de l'objet json en utilisant loadsh angulaire 2

Mon Json Objet:

{ 
    "personal": { 
    "strenths": {}, 
    "books": [{},{},{"Perority1": "Test","level": ""},{"Perority2": "","level": ""},{"courses": [{},{},{}]}] 
    }, 
    "eduction": [{},{},[{}]] 
}; 

Essayez de supprimer la méthode utilisant

clean(obj) { 
    console.log("Enter in a Clean() Method::::"); 
    Object.keys(obj).forEach(key => { 
     if ($.isArray(obj[key])) { 
      obj[key] = $.remove(obj[key], function(n) { 
       if ($.isObject(n) && (n === null || n === undefined || $.isEmpty(n))) { 
        return false; 
       } else { 
        return true; 
       } 
      }); 
      console.log("After Change Array:::::" + JSON.stringify(obj[key])); 
      if (obj[key] === null || obj[key] === undefined || $.isEmpty(obj[key])) { 
       delete obj[key]; 
      } else { 
       this.clean(obj[key]); 
      } 

     } else if ($.isObject(obj[key])) { 

      if (obj[key] === null || obj[key] === undefined || $.isEmpty(obj[key])) { 
       delete obj[key]; 
      } else { 
       this.clean(obj[key]); 
      } 
     } 
    }); 
    return obj; 
} 

Ma sortie:

{"personal":{"books":[{"Perority1":"Test","level":""},{"Perority2":"","level":""},{}]},"eduction":[null]} 

Résultats escomptés:

{"personal":{"books":[{"Perority1":"Test","level":""},{"Perority2":"","level":""}]}} 

Répondre

0

Au lieu d'une récursion compliquée, et la modification tje objet à l'intérieur, vous pouvez stringify l'objet, et laissez-vous rappel (2ème paramètre de JSON.parse) faire la récursion en Parsin il de chaîne, pour supprimer un propriété retourne simplement indéfini;

var data = { 
 
    "personal": { 
 
    "strenths": {}, 
 
    "books": [{},{},{"Perority1": "Test","level": ""},{"Perority2": "","level": ""},{"courses": [{},{},{}]}] 
 
    }, 
 
    "eduction": [{},{},[{}]] 
 
}; 
 

 
data = JSON.parse(JSON.stringify(data), function(k, v){ 
 
    if (Array.isArray(v)) { 
 
     var fArr = v.filter(e=>e); 
 
     return fArr.length && fArr || undefined; 
 
    } else if(typeof(v) === "object" && !Object.keys(v).length) { 
 
     return undefined; 
 
    } else {return v}; 
 
}); 
 

 
console.log(JSON.stringify(data));

Cependant, le code peut être mieux, je viens d'écrire à la volée sur la base de vos besoins.