var template = {
personal: {},
education: {},
certificate: [{"test": "Test"}, {}, {}],
experience: []
}
removeEmptyObj(template);
function removeEmptyObj(obj)
for (var key in obj) {
console.log("Foor Loop" + key + " " + obj[key]);
if (_.isObject(obj[key]) && !_.isEmpty(obj[key])) {
console.log("Second Loop Object:::" + key + " " + obj[key]);
removeEmptyObj(obj[key]);
}
if (_.isEmpty(obj[key])) {
console.log("Delete Object:::" + key + " " + obj[key]);
obj = _.omitBy(obj, _.isEmpty);
}
}
console.log(obj);
return obj;
}
当前输出是:{certificate: [{"test": "Test"}, {}, {}]}
期望的输出:{certificate: [{"test": "Test"}]}
这里有什么问题你的帮助感谢:)
最佳答案
您可以 _.transform()
将对象递归到一个新对象,并在途中清理空对象和数组。
注意:为了演示,我在结构中添加了更多元素
var template = {
personal: {},
education: {},
certificate: [{}, {"test": "Test"}, {}, {}, [{}], [{}, 1, []]],
experience: [[1, 2, [], { 3: [] }]]
};
function clean(el) {
function internalClean(el) {
return _.transform(el, function(result, value, key) {
var isCollection = _.isObject(value);
var cleaned = isCollection ? internalClean(value) : value;
if (isCollection && _.isEmpty(cleaned)) {
return;
}
_.isArray(result) ? result.push(cleaned) : (result[key] = cleaned);
});
}
return _.isObject(el) ? internalClean(el) : el;
}
console.log(clean(template));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
关于javascript - 如何使用 lodash 递归地从 JSON 中删除空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44806313/