使用角度2中的loadsh递归删除json对象中的空白对象和数组
问题描述:
我尝试从后续从我的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":""}]}}
答
而是一个复杂的递归和改变内部的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));
然而,代码可以更好,我只是在飞行中写道:对你的需求基础。