Articles of 树

使用callback完成树行走后执行一个函数

我有一个简单的树,id是Mongo集合的关键。 我正在使用一个名为treewalker的节点库。 当我走树的每个节点时,我试图查找名称(使用mongoose),并简单地将其附加到当前节点。 如果我不做callback查找节点名称,只是使用一些固定值,我得到我期待的价值。 让我用代码来说明: 这是我的树: { "categoryTree": [ { "categoryId": "1", "children": [ { "categoryId": "2", "children": [ { "categoryId": "3", "children": [] }, { "categoryId": "4", "children": [] } ] }, { "categoryId": "5", "children": [] }, { "categoryId": "6", "children": [] } ] }, { "categoryId": "7", "children": [ { "categoryId": "8", […]

如何做Redis树并优化它+ Node.js

我需要caching将由几个node.js工作人员使用的数据。 下面是这个数据的层次结构,它是三层深的: 每个类别都有相同的子类别,并且都是固定的大小。 每个“数据”包含4个字段,其中一个是唯一的ID。 会有相当多的“数据”插入和删除。 在Redis中实现这样的数据库的最好方法是什么? 哈希集cat + subcat,因为我有他们的固定数量,哈希集还为每个字段具有该唯一ID的数据becouse? 谢谢!

在JavaScript中什么树距离库?

我正在寻找一个图书馆,实施任何似乎有据可查的*策略计算树木之间的距离。 例如,图书馆应该显示这两棵树 aa / \ / \ bcbc \ d 比这两个更“相似” ax / \ / \ bcyz 我使用node.js,所以一个节点的实现将是很好的。 我知道“类似”看起来有点模棱两可,但不pipe用什么策略来计算这些树之间的差异,我假设你总是会得到一些最终的“分数”,如果表示一个编辑距离在第二种情况下比在第一种情况下更大。 什么node.js库做这样的事情? 编辑:在我的具体情况的一些增加的信息:这是为了检测HTML文档中的重复树结构,所以更专门针对这个问题的库会更好。 编辑2:即使是一个levenshtein距离库node.js会帮助,所以我可以至less比较树的指纹文本。 *我是这个领域的新手,但是scribd.com讨论了Lu和Tai使用的策略。

更新嵌套树mongoDB,node.js中的后代

有没有办法通过ID或其他字段更新嵌套的文件? 我使用“ 单一文件中的完整树 ”,事先不知道嵌套深度可以达到多less。 需要更新,例如,用{id:'104'}回答。 我可以通过'点符号'来做到这一点,但是因为我不知道嵌套的级别(深度),所以我无法预测我的'comment.answers.answers….answers.'多久'comment.answers.answers….answers.' 可以去。 有什么办法可以直接find并更新id:'104',还是需要通过某种深度标记? { title:'some title', comment: { id:'101' author:'Joe', text:'some comment', answers: [ { id:'102' author:'Joe', text:'first answer to comment', answers: [ { id:'103' author:'Done', text:'first answer to first answer to comment', answers:[] }, { id:'104' author:'Bob', text:'Second answer to first answer to comment', answers:[] } ] }, { […]

Javascript:涉及I / O的定向树的DFS遍历

给定一个定向树T,每个节点的子节点数可变,我想find一个从根开始的“好”节点的PATH_SIZE大小的path。 每个节点都有一个isGood()方法和一个按照预期工作的getChildren()方法。 一个简单的DFSrecursion解决scheme将如下所示:(请纠正我,如果我错了) function findGoodPath(node, depth){ if(!node.isGood()){ return null; } else if (depth==PATH_SIZE){ return [node]; } var children = node.getChildren(); for (var i=0; i<children.length; i++){ var result = findGoodPath(children[i], depth+1); if (result){ return result.concat([node]); } } return null; } 调用findGoodPath(root, 1)应该find一个结果,如果存在的话。 现在的问题是 :节点对象的getChildren()方法实际上是一个asynchronous方法,在后台执行I / O操作。 它什么都不返回,并期望一个callback参数来处理返回的孩子。 修改后的代码解决scheme(这是错误的 )可能看起来像这样: function findGoodPath(node, depth){ if(!node.isGood()){ return null; } […]

在mongoDB中迭代树

我有这样的数据的集合(例如): { name : "john" , _id : "0" }, { name : "Richard" , parent_id : "0" , _id : "1" }, { name : "Kevin" , parent_id : "0" , _id : "2" }, { name : "William" , parent_id : "1" , _id : "3" }, { name : "George" , parent_id […]

在JavaScript中将文件/目录结构转换为“树”

我有一个像这样的对象数组: [{ name: 'test', size: 0, type: 'directory', path: '/storage/test' }, { name: 'asdf', size: 170, type: 'directory', path: '/storage/test/asdf' }, { name: '2.txt', size: 0, type: 'file', path: '/storage/test/asdf/2.txt' }] 可以有任意数量的任意path,这是遍历目录中的文件和文件夹的结果。 我想要做的是确定这些的“根”节点。 最终,这将被存储在MongoDB中,并使用物化path来确定它的关系。 在这个例子中, /storage/test是一个没有父节点的根。 /storage/test/asdf具有/storage/test的父级,它是/storage/test/asdf/2.txt的父级。 我的问题是,你将如何去遍历这个数组,以确定父母的和相关的孩子? 任何帮助正确的方向将是伟大的! 谢谢

在javascript中将数组转换为嵌套对象

我有典型的组织hierarchy 。 例如。 D,E is reporting to B. B,C is reporting to A. A是最顶端的节点。 但是,我收到这个数据作为一个平面数组与指向父母的属性。 [{ name: "A", parent: null }, { name: "B", parent: "A" }, { name: "C", parent: "A" }, { name: "D", parent: "B" }, { name: "E", parent: "B" }] 但我想将其转换为single nested object或tree 。 根节点具有儿童embedded的子属性,每个子节点都有自己的子属性。 { name: "A", children: [{ […]

使用async.js进行asynchronous树遍历

我试图使用async.js遍历一个嵌套的项目树。 遍历一个分支后,遍历终止。 var count=0; exports.buildFamily = function(item_id, mback){ var extendedFamily={}; exports.getItembyId(item_id, function(err, item){ extendedFamily=item; if(item.descendants){ extendedFamily.kids=[]; count=+item.descendants.length; console.log('outercount ' + count); async.eachSeries(item.descendants, function(item){ count– console.log('item: ' + item) exports.buildFamily(item, function(err, family){ console.log('deepcount: ' + count); extendedFamily.kids.push(family); if(count===0){ return mback(null, extendedFamily);} else {extendedFamily.kids.push(family);} }) }) } else{ if(count===0){ return mback(null, extendedFamily);} else{ extendedFamily.kids.push(family); return; } } […]