我有一个对象,它有多个子对象(这个对象是序列化的MongoDB记录)
{
_id: '5881f6564d56a24f09562d9e',
key: 'value',
child: {
_id: '5882211a010ea9725a3efdd1',
key: 'value2',
param: 'param',
nested: {
_id: '588221592eb1530d6fcc252a',
arr: [ '588221b83f0f833ba132b670', '588224490a15d836d1ba56e4' ]
}
},
another: {
_id: '58822c4e48db7912655b3419',
param: 'value'
}
}
在我的应用程序中使用此对象之前,我需要通过函数传递它。
function processData(value) {
// do stuff
return value
}
但是,此功能(不受我控制)不支持嵌套文档。要正确处理对象,它必须从最深的嵌套文档开始,用返回值替换它,然后处理下一级别等。
'文档'是一个具有键_id
的对象。可能有其他对象没有 _id
,这些对象不需要处理。因此,需要按以下顺序处理:
obj.child.nested = processData(obj.child.nested)
obj.child = processData(obj.child)
obj.another = processData(obj.another)
obj = processData(obj)
该顺序仅对具有嵌套子项的对象有用(例如,obj.another
可以在obj.child
之前处理,只要在obj.child.nested
之前处理obj.child
)。
这是我到目前为止所做的:http://jsbin.com/nenuvuwiwa/edit?js,console
答案 0 :(得分:0)
这是我最终使用的:
function processData(obj) {
// Placeholder function to indicate it has
// been processed (in reality sets a load of
// prototype functions etc)
obj.processed = true;
return obj;
}
function processDoc(doc) {
for (key in doc) {
var val = doc[key];
if (val.hasOwnProperty('_id')) {
val = processDoc(val);
val = processData(val)
}
}
return doc;
}
var res = processDoc(obj)