javascript - 如何使用 lodash 递归地从 JSON 中删除空对象

标签 javascript arrays json lodash

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/

相关文章:

javascript - 如何使用 jquery 找到鼠标悬停时的当前元素文本

javascript 和 node.js : oop

json - 尝试 POST 时为 "Invalid JSON"

javascript - 使用单选按钮更改记录。

javascript - 已设置不透明样式的 DIV 上的 Jquery fadeIn()

c# - 向后复制数组?阵列。复制?

json - 当我使用withformat将结果呈现为grails中的json时,为什么会得到HTTP Status 404?

javascript - 我怎样才能摆脱这个错误以及为什么我无法进入该页面

javascript - jQuery 选择具有公共(public)关键字的数据属性

java - 如何将嵌套列表转换为多维数组?