我从另一个构建递归树时遇到问题。该函数似乎有效但如果展开第一个数组,您会注意到索引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通过引用返回值...
这是一个 plunk with the complete data ,点击按钮后查看控制台,了解我的意思。
答案 0 :(得分:1)
我无法理解你的代码。也许你的问题与你在递归过程中传入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;
}