2017-09-01 54 views
0

我尝试从后续从我的json对象中删除所有空白对象和数组对象,但在angular2中使用lodash但未在对象中正确解析。使用角度2中的loadsh递归删除json对象中的空白对象和数组

我的JSON对象:

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

尝试使用方法

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; 
} 
删除

我的输出:

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

预期输出:

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

回答

0

而是一个复杂的递归和改变内部的TJE对象,你可以字符串化的对象,让你的回调(的JSON.parse第二个参数)做递归而从字符串解析的源代码它,删除属性只是返回undefined;

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));

然而,代码可以更好,我只是在飞行中写道:对你的需求基础。