2016-11-17 21 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

はい、ちょうど深さがありません! –

+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));