javascript - 如何使用js深度删除对象中value为''空的属性?

查看:134
本文介绍了javascript - 如何使用js深度删除对象中value为''空的属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如题,对于一个多层嵌套的对象。例如

var o = {
  a:1,
  b:{b_a:''},
  c:{c_a:1,c_b:''}
}

通过处理,希望得到

{
  a:1,
  c:{c_a:1}
}

尝试过这个方法(stackOverflow):

function removeEmpty(obj) {
  Object.keys(obj).forEach(function(key) {
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) ||
    (obj[key] === undefined || obj[key] === null) && delete obj[key]
  });
  return obj;
};

没有成功.求一个删除空value''和空对象{}的属性方法,蟹蟹。

解决方案

试试下面代码,没用函式库,直接作两次递回,第一次去空字串,第二次是去空对象,没细测过大量资料时的效能,但可得出你要的结果。再深层一些可再试试:

function isEmpty(obj) {
   return (Object.keys(obj).length === 0 && obj.constructor === Object);
}

function deleteEmptyString(test, recurse) {
    
    for (var i in test) {
        if (test[i] === '' ) {
            delete test[i];
        } else if (recurse && typeof test[i] === 'object') {
            deleteEmptyString(test[i], recurse);
        }
    }
       
}

function deleteEmptyObject(test, recurse) {
    
    for (var i in test) {
        if (isEmpty(test[i]) ) {
            delete test[i];
        } else if (recurse && typeof test[i] === 'object') {
            deleteEmptyObject(test[i], recurse);
        }
    }
       
}



var o = {
  a:1,
  b:{b_a:''},
  c:{c_a:1,c_b:''},
  //d:{d_a:1,d_b:'', d_c: { x:'', y:1}, d_d:{ z:'' } }
}



deleteEmptyString(o, true);
console.log(o);

deleteEmptyObject(o,true);
console.log(o);

参考自: http://stackoverflow.com/ques...

http://stackoverflow.com/ques...

这篇关于javascript - 如何使用js深度删除对象中value为''空的属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆