js 去除JSON里的值为空字符串的键

241 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

如题,假设obj = {'a': 1, 'b': '', 'c': ['', 1, {'a': ''}], 'd': {'a': {'b': '', 'c': {'d': ''}}}}

那么结果应为{ 'a': 1, 'c': [ '', 1, { a: '' } ], 'd': { 'a': { 'c': {} } } }

  • 方案一:for in
function remove_empty(obj) {
  for (let k in obj) {
    v = obj[k];
    if (v === '') delete obj[k];
    else if (v.constructor == Object) remove_empty(v);
  }
}
  • 方案二:forEach
function remove_empty(obj) {
  Object.keys(obj).forEach(function(k) {
    v = obj[k];
    if (v === '') delete obj[k];
    else if (v.constructor == Object) remove_empty(v);
  })
}
  • 方案三:采用while来替代递归
function remove_empty(obj) {
  let objects = [obj];
  do {
    let sub_objects = [];
    objects.forEach(function(i) {
      Object.keys(i).forEach(function(k) {
        if (i[k] === '') delete i[k];
        else if (i[k].constructor == Object) sub_objects.push(i[k]);
      });
    });
    objects = sub_objects;
  } while (objects != false);
}
  • 附:Python版remove_empty
def remove_empty(obj: dict) -> None:
    for k, v in list(obj.items()):
        if v == '':
            del obj[k]
        elif isinstance(v, dict):
            remove_empty(v)