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
这不是一个多维数组,而是一棵树。好的,这是一棵树,谢谢你,但我如何正确构造树?