2016-11-17 6 views
0

Ich versuche, eine JSON-Struktur in Mongodb zu speichern, aber ich möchte die Tiefe der Rekursivität (DEPTH), dass jedes Element beim Durchlaufen dieser Funktion hat.DEPTH von JavaScript rekursive Funktion

_.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); 
}); 

Ich habe: Wie kann ich diese Wiederverwendung die folgende Funktion erreichen ?:

_.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

wo ist 'DEPTH' im Code? –

+0

Ja, nur TIEFE fehlt! –

+0

Gibt es nicht. Das ist genau das, was ich finden möchte – w3jimmy

Antwort

1

Ich weiß nicht, wie Underscore.js funktioniert, aber ich denke, es kann so gemacht werden, habe gerade ein Tiefenargument hinzugefügt; und unbenutzte Argumente entfernt haben, können Sie es zurück hinzufügen, wenn Sie brauchen.

+0

dieser hat funktioniert, danke! – w3jimmy

0

Ein Versuch mit einem Verschluss für die Tiefe.

_.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));