如何解决将平面结构转换为分层结构
这个很好用,很容易阅读:
function flatToHierarchy (flat) {
var roots = [] // things without parent
// make them accessible by guid on this map
var all = {}
flat.forEach(function(item) {
all[item.guid] = item
})
// connect childrens to its parent, and split roots apart
Object.keys(all).forEach(function (guid) {
var item = all[guid]
if (item.parent === null) {
roots.push(item)
} else if (item.parent in all) {
var p = all[item.parent]
if (!('Children' in p)) {
p.Children = []
}
p.Children.push(item)
}
})
// done!
return roots
}
解决方法
我需要创建一个能够将平面对象转换为递归对象的函数。这是我的示例:我有平面数组:
var flatArray = [
{
Description: "G",guid: "c8e63b35",parent: null,},{
Description: "Z",guid: "b1113b35",parent: "c8e63b35",{
Description: "F",guid: "d2cc2233",parent: "b1113b35",{
Description: "L",guid: "a24a3b1a",{
Description: "K",guid: "cd3b11caa",parent: "a24a3b1a",]
结果应该是:
recursiveArray = [
{
Description: "G",Children: [
{
Description: "Z",Children: [
{
Description: "F",}
]
},]
},Children: [
{
Description: "K",}
}
]
请帮助我找到解决方法。一个有效的算法将不胜感激,因为我在理解如何正确执行此操作方面存在问题。在每种情况下,我都需要为递归结构中的选中元素找到一个特定的位置,并将其推入找到的子元素数组中。我认为这是愚蠢且低效的。有什么方法可以快速有效地做到这一点?
编辑:递归数组的格式错误。现在应该可以了。我的数组没有任何排序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。