2016-11-17 60 views
0

我试图在mongodb中保存一个json结构,但我希望获得循环遍历此函数时每个项目所具有的递归深度(DEPTH)。我怎样才能做到这一点重用以下功能?:javascript递归函数的深度

_.mixin({ 
    importJsonItemsToMongo: function (obj, opt, iterator) { 
     function recurse (json_item) { 
      // console.log(`level ${DEPTH}: ${json_item.name}`); 
      db.collection('json_import_items').insert(json_item); 
      _.each(json_item.child_items, _.importJsonItemsToMongo); 
     }; 
     recurse(obj); 
    } 
}); 
_.each(jsonResponse.child_items, _.importJsonItemsToMongo); 
+1

代码中的DEPTH是什么? –

+0

是的,只有DEPTH失踪! –

+0

没有。这正是我想要找的 – w3jimmy

回答

1

我不知道怎么underscore.js没有工作,但我想,这是可以做到这样的:

_.mixin({ 
    importJsonItemsToMongo: function (obj, depth) { 
     console.log(`level ${DEPTH}: ${obj.name}`); 

     db.collection('json_import_items').insert(obj); 

     _.each(obj.child_items, function(x) { 
      _.importJsonItemsToMongo(x, depth + 1); 
     }); 
    } 
}); 
_.each(jsonResponse.child_items, function(x) { 
    _.importJsonItemsToMongo(x, 0); 
}); 

我有只是增加了一个深度参数;并删除了未使用的参数,如果需要,可以将其添加回去。

+0

这一个工作,谢谢! – w3jimmy

0

尝试关闭深度。

_.mixin({ 
    importJsonItemsToMongo: function(DEPTH) { 
     return function (obj, opt, iterator) { 
      function recurse (json_item) { 
       // console.log(`level ${DEPTH}: ${json_item.name}`); 
       db.collection('json_import_items').insert(json_item); 
       _.each(json_item.child_items, _.importJsonItemsToMongo(DEPTH + 1)); 
      }; 
      recurse(obj); 
     }; 
    } 
}); 
_.each(jsonResponse.child_items, _.importJsonItemsToMongo(0));