从另一个树构建递归树
Building an recursive tree from another
我在从另一个树构建递归树时遇到了一个问题。这个函数似乎可以工作,但是如果你展开第一个数组,你会注意到在索引2处有一个无穷递归。
构建树的函数:
var buildTree = function(data, idx, aparent){
var parent = aparent || [];
for(var i = 0, c = data.length ; i < c ; i++){
parent.push({
text: data[i].text,
items: []
});
if(typeof data[i].items !== 'undefined' && data[i].items.length > 0){
var t = buildTree(data[i].items, idx + 1, parent[parent.length - 1].items);
parent[parent.length - 1].items.push(t);
}
}
return parent;
};
这就是树数据的样子:
[{
text: "house",
groupId: "1",
type: "group",
items: [{
text: "basement",
groupId: "2",
type: "group"
},{
text: "flat-1",
groupId: "3",
type: "group",
items: [{
text: "computer"
}]
}]
},{
text: "other-house",
groupId: "4",
type: "group"
}];
我认为我做了一些事情,javascript通过引用返回值…
这是一个带有完整数据的,点击按钮后检查控制台以了解我的意思。
我实在看不懂你的代码。也许您的问题与您在递归期间传递items
-数组的事实有关。
我已经修复了你的代码-使它更简单,更容易阅读。如果存在的话,它依赖于属性items
是array
,所以如果不是总是这样,您需要为这种情况添加错误处理。
function recursiveBuildTree(data) {
var result = [];
data.forEach(function(item) {
var newItem = {
text: item.text,
items: item.items ? recursiveBuildTree(item.items) : []
};
result.push(newItem);
});
return result;
}
相关文章:
- 数组在递归方法中设置为null
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 递归使用 eval() 是检查程序执行的好方法吗?
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 递归深度比较
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 递归函数中断
- 在JavaScript中,从一组数组递归地构建一个字典/嵌套对象
- 如何构建用于计数数字的递归流
- Javascript 递归循环到自动构建菜单结构不起作用
- 如何使用promise返回从递归AJAX调用构建的集合
- 构建对象递归
- Javascript:通过递归迭代对象来构建导航列表
- 从另一个树构建递归树
- 递归地构建一个包含所有可能组合的JavaScript数组,同时尊重顺序
- 递归构建器嵌套问题
- 递归地遍历对象以构建属性列表
- JS递归地构建对象
- 我怎样才能递归和异步地构建一棵未知大小的树
- 从javascript数组递归地构建一个树