gpt4 book ai didi

javascript - 从另一个树构建递归树

转载 作者:行者123 更新时间:2023-11-28 01:06:30 24 4
gpt4 key购买 nike

我在从另一个树构建递归树时遇到问题。该函数似乎可以工作,但如果您展开第一个数组,您会注意到索引 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 ,单击按钮后检查控制台以了解我的意思。

最佳答案

我无法真正理解你的代码。也许您的问题与您在递归期间传入 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;
}

关于javascript - 从另一个树构建递归树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25021146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com