2016-03-05 72 views
1

如果一个对象的所有键都是空的,我想用undefined替换它们。例如如何递归删除空对象?

{ 
    a: 1, 
    b: { 
     c: 2, 
     d: { 
      e: undefined, 
      f: undefined, 
     } 
    }, 
    g: { 
     h: undefined, 
     i: undefined, 
    } 
} 

应该是:

{ 
    a: 1, 
    b: { 
     c: 2, 
     d: undefined 
    }, 
    g: undefined 
} 

保持未定义的值,因为它是消除从MongoDB的

回答

2

首先,德关键是很重要的,我们可以定义一个函数删除所有undefined值以符合您的要求

function removeUndefinedObject(obj) { 
    var isAllUndefined = true; 

    for (var k in obj) { 
     if (typeof obj[k] === 'object') { 
      obj[k] = removeUndefinedObject(obj[k]); 
     } 
     if (typeof obj[k] !== 'undefined') 
      isAllUndefined = false; 
    } 

    if (isAllUndefined) 
     obj = undefined; 
    return obj; 
} 

然后使用此功能的MongoDB集合

var cursor = db.collection.find({}); // get all documents from collection 
cursor.forEach(function(doc) { 
    // remove undefined value for each document 
    removeUndefinedObject(doc); 
    // save this changed doc into this collection 
    db.collection.update({_id: doc._id}, doc); 
}); 
+0

最适合我的例子,但是当所有的元素是不确定的,它不留根:{A:{B:未定义,C:未定义}}应该是{A: undefined} – Yamila

+0

@YamiFraiman,用代码'var obj = {a:{b:undefined,c:undefined}}进行测试; removeUndefinedObject(OBJ); obj',那么结果是'{a:undefined}'。在我的测试中似乎是正确的。 – zangw

+0

我的错!我正在为我的obj分配响应。非常感谢! – Yamila