2012-01-08 20 views
10

MongoDBでマテリアライズドパスを使用してツリーを表現する予定で、マテリアライズドパスをJSONツリーに変換する必要があります。マテリアライズドパスからJSONツリーを構築する

ex。 //結果は次のようになり、パス

var input = [ 
    {"id": "0", "path": "javascript" }, 
    {"id": "1", "path": "javascript/database" }, 
    {"id": "2", "path": "javascript/database/tree" }, 
    {"id": "3", "path": "javascript/mvc" }, 
    {"id": "4", "path": "javascript/mvc/knockout.js"}, 
    {"id": "5", "path": "javascript/mvc/backbone.js"}, 
    {"id": "6", "path": "c++" }, 
    {"id": "7", "path": "c++/c0xx"}, 
    {"id": "8", "path": "c++/c0xx/lambda expressions"}, 
    {"id": "9", "path": "c++/c0xx/vc10" } 
]; 

をマテリアライズド:

[ 
    { 
     "id": "0", 
     "name": "javascript", 
     "children": [ 
      { 
       "id": "1", 
       "name": "database", 
       "children": [ 
        { 
         "id": "2", 
         "name": "tree", 
         "children": [] 
        } 
       ] 
      }, 
      { 
       "id": "3", 
       "name": "mvc", 
       "children": [ 
        { 
         "id": "4", 
         "name": "knockout.js", 
         "children": [] 
        }, 
        { 
         "id": "5", 
         "name": "backbone.js", 
         "children": [] 
        } 
       ] 
      } 
     ] 
    }, 
    { 
     "id": "6", 
     "name": "c++", 
     "children": [ 
      { 
       "id": "7", 
       "name": "c0xx", 
       "children": [ 
        { 
         "id": "8", 
         "name": "lambda expressions", 
         "children": [] 
        }, 
        { 
         "id": "9", 
         "name": "vc10", 
         "children": [] 
        } 
       ] 
      } 
     ] 
    } 
] 

は、私が正常に動作 Convert delimited string into hierarchical JSON with JQueryを見つけました。

また、私もBuild tree from materialized pathがRubyで書かれており、再帰を使用しています。私はJavascriptでこれが実装されていることを知りたいと思って興味があり、RubyとJavascriptの両方に慣れている人がいて、書き直したい人がいるかどうか疑問に思います。私はRuby to JSコンバータを試しましたが、結果は理解できませんでした。

おかげで、 ネヴィル

答えて

3
var Comment = new Schema({ 
    date  : { 
     type  : Date, 
     default  : Date.now 
    }, 
    event: ObjectId, 
    body  : String, 
    pathComment : String, 
    user: Array 
}) 
Comment.virtual('level').get(function() { 
    return this.pathComment.split(',').length; 
}); 

Comment.find({event: event.id}).sort({pathComment:1}).exec(function(err, comment){ 

      var collectComment = function(comment){ 
       return { 
        body: comment.body, 
        event: comment.event, 
        pathComment: comment.pathComment, 
        id: comment._id, 
        level: comment.level, 
        user: comment.user[0], 
        date: comment.date, 
        comments: [] 
       }; 

      } 
      var tplComment = []; 

      var createChildComment = function(comment, currentNode, level){ 

       if(level==1){ 
        comment.push(collectComment(currentNode)); 
       }else{ 
        createChildComment(comment[comment.length-1]['comments'], currentNode,level-1); 
       } 
       return; 

      } 

      for(var k in comment){ 
       createChildComment(tplComment, comment[k],comment[k].level); 
      } 
}); 
+1

感謝。私は私の必要性のためにうまく動作するhttp://stackoverflow.com/questions/6232753/convert-delimited-string-into-hierarchical-json-with-jqueryからコードを使用して終了しました。 コードがどのように機能するかに関するコメントは、大歓迎です。 – nevf

関連する問題