2016-03-05 97 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