Apache flex 从平面数组构造多维数组
您好,我从以下服务接收平面阵列Apache flex 从平面数组构造多维数组,apache-flex,actionscript,flex4.6,Apache Flex,Actionscript,Flex4.6,您好,我从以下服务接收平面阵列 [0] [] (@bf4f219) [0] Object (@a55f1a9) breadcrumb "{2}" entity_name "parent 2" id 2 level 1 parent_id 0 [1] Object (@a5be281) breadcrumb "{2,4}"
[0] [] (@bf4f219)
[0] Object (@a55f1a9)
breadcrumb "{2}"
entity_name "parent 2"
id 2
level 1
parent_id 0
[1] Object (@a5be281)
breadcrumb "{2,4}"
entity_name "child for parent 2"
id 4
level 2
parent_id 2
[2] Object (@a5bea01)
breadcrumb "{2,4,5}"
entity_name "child for 4"
id 5
level 3
parent_id 4
[3] Object (@a5ed179)
breadcrumb "{2,4,5,7}"
entity_name "child for 5"
id 7
level 4
parent_id 5
[4] Object (@a5ed6d1)
breadcrumb "{2,6}"
entity_name "child 2 for parent 2"
id 6
level 2
parent_id 2
[5] Object (@a5edb09)
breadcrumb "{2,8}"
entity_name "another child for 2"
id 8
level 2
parent_id 2
[6] Object (@a5edda9)
breadcrumb "{2,9}"
entity_name "another child for 2"
id 9
level 2
parent_id 2
我需要做的是基于每个对象中提供的id和parent_id构造一个多维数组,请注意,如果这有帮助,维度中的级别也会为每个项目提供
我有一个真正的大脑空白,无法找出这一个,请帮助,因为我必须找到一个解决办法快
提前感谢。因为在根级别可以有任意数量的父id,所以最终可以有多棵树 试试这个,祝你好运:
var trees:Array = buildTrees(FLAT);
private static const FLAT:Array =
[
{breadcrumb: "{2}", entity_name: "parent 2",
id: 2,
level: 1,
parent_id: 0},
{breadcrumb: "{2,4}", entity_name: "child for parent 2",
id: 4,
level: 2,
parent_id: 2},
{breadcrumb: "{2,4,5}", entity_name: "child for 4",
id: 5,
level: 3,
parent_id: 4},
{breadcrumb: "{2,4,5,7}", entity_name: "child for 5",
id: 7,
level: 4,
parent_id: 5},
{breadcrumb: "{2,6}", entity_name: "child 2 for parent 2",
id: 6,
level: 2,
parent_id: 2},
{breadcrumb: "{2,8}", entity_name: "another child for 2",
id: 8,
level: 2,
parent_id: 2},
{breadcrumb: "{2,9}", entity_name: "another child for 2",
id: 9,
level: 2,
parent_id: 2}
];
private function buildTrees(flat:Array):Array
{
if (!flat.length)
return null;
flat.sortOn("parent_id", Array.NUMERIC);
var trees:Array = new Array();
var i:uint;
for (i = 0; i < flat.length; i ++)
{
var node:Object = {parent_id: flat[i].parent_id, id: flat[i].id, level: flat[i].level,
breadcrumb: flat[i].breadcrumb, entity_name: flat[i].entity_name, nodes: new Array()};
var root:Object = findRoot(flat[i].parent_id, trees);
if (root) {
root.nodes.push(node);
}
else
trees.push(node);
}
for (i = 0; i < trees.length; i ++)
sortTree(trees[i]);
return trees;
}
private function findRoot(parent_id:int, trees:Array):Object
{
for (var i:uint = 0; i < trees.length; i ++)
{
var node:Object = findNode(parent_id, trees[i]);
if (node)
return node;
}
return null;
}
private function findNode(parent_id:int, root:Object):Object
{
if (root.id == parent_id)
return root;
for (var i:uint = 0; i < root.nodes.length; i ++)
{
var node:Object = findNode(parent_id, root.nodes[i]);
if (node)
return node;
}
return null;
}
private function sortTree(root:Object):void
{
root.nodes.sortOn("level", Array.NUMERIC);
for (var i:uint = 0; i < root.nodes.length; i ++)
sortTree(root.nodes[i]);
}
var-trees:Array=buildTrees(平面);
私有静态常量平面:数组=
[
{面包屑:“{2}”,实体名称:“父2”,
id:2,
级别:1,
父\u id:0},
{breadcrumb:“{2,4}”,实体名称:“父对象2的子对象”,
id:4,
级别:2,
父\u id:2},
{面包屑:“{2,4,5}”,实体名称:“4的孩子”,
id:5,
级别:3,
父项id:4},
{面包屑:“{2,4,5,7}”,实体名称:“5岁儿童”,
id:7,
级别:4,
父项id:5},
{面包屑:“{2,6}”,实体名称:“父2的子2”,
id:6,
级别:2,
父\u id:2},
{面包屑:“{2,8}”,实体名称:“2的另一个孩子”,
id:8,
级别:2,
父\u id:2},
{面包屑:“{2,9}”,实体名称:“2的另一个孩子”,
id:9,
级别:2,
父\u id:2}
];
私有函数构建树(平面:数组):数组
{
如果(!扁平长度)
返回null;
flat.sortOn(“parent_id”,Array.NUMERIC);
变量树:数组=新数组();
变量i:uint;
对于(i=0;i
这不是一个多维数组,而是一棵树。好的,这是一棵树,谢谢你,但我如何正确构造树?