javascript - 如何使用js深度删除对象中value为''空的属性?
PHPz
PHPz 2017-04-10 17:24:42
0
2
234

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

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''和空对象{}的属性方法,蟹蟹。

PHPz
PHPz

学习是最好的投资!

全部回复(2)
Ty80

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

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...

左手右手慢动作

有借鉴一楼

//无论是空字符串、空整形、空对象都返回true
function isEmpty(obj){
    var _isEmpty = false;
    if(typeof obj ==='string'||typeof obj ==='number'){
        _isEmpty = !obj;
    }else if(isPlainObj(obj)){
        var value = "";
        for(var i in obj){
            value += obj[i];
        }
        _isEmpty = !value;
    }

    return _isEmpty;
}

//判断是否是字面量对象
function isPlainObj(obj){
    return (obj instanceof Object )&& (obj.constructor === Object);
}

function deleteEmptyObj (key,container){
    container = container||window;
    if(isEmpty(container[key])){
        delete container[key];
    }else if(isPlainObj(container[key])){
        for(var i in container[key]){
            deleteEmptyObj(i,container[key]);
        }
    }
}


var o = {
  a:1,
  b:{b_a:''},
  c:{c_a:1,c_b:''}
};
//就是调用比较奇怪一点
deleteEmptyObj('o',window);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板