Kendo ui 在使用剑道树状视图时,是否有一种基于ID或文本合并多个节点的方法?

Kendo ui 在使用剑道树状视图时,是否有一种基于ID或文本合并多个节点的方法?,kendo-ui,kendo-treeview,Kendo Ui,Kendo Treeview,我有3个不同的对象/节点,如下所示,我正在尝试形成finalObj/节点,它是3个节点的并集(唯一树列表) 在树状视图中是否有一种方法可以根据文本或id合并3个对象(节点) First node: [ { text: "TreeRoot", items: [ { text: "Subgroup1" }, { text: "Subgroup2" }

我有3个不同的对象/节点,如下所示,我正在尝试形成finalObj/节点,它是3个节点的并集(唯一树列表)

在树状视图中是否有一种方法可以根据文本或id合并3个对象(节点)

First node: 

 [ { text: "TreeRoot", items: [
                                { text: "Subgroup1" },
                                { text: "Subgroup2" }   
                            ]}]

Second Node:
                 [ { text: "TreeRoot", items: [
                            { text: "Subgroup3" }   
                        ]}]


Third node:
                 [{ text: "Subgroup3",
                        items: [ {
                                text: "subgroup5",
                                items: [ {
                                        text: "subgroup6",
                                        items: [ {
                                                text: "subgroup7",
                                                items: [ {
                                                        text: "subgroup8"
                                                    }]
                                            }] }] 
                            }]}]



Final expected node (after merging):

                var finalObj= [ { text: "TreeRoot", items: [
                            { text: "Subgroup1" },
                            { text: "Subgroup2" },
                            { text: "Subgroup3",
                                items: [ {
                                        text: "subgroup5",
                                        items: [ {
                                                text: "subgroup6",
                                                items: [ {
                                                        text: "subgroup7",
                                                        items: [ {
                                                                text: "subgroup8"
                                                            }]
                                                    }] }] 
                                    }]}]}]
编辑:

以下解决方案不适用于其他类型的节点

例如:

   var node1 = [
                    { text   : "TreeRoot",
                        id:0,
                        items: [
                            { text: "Subgroup1",id:1 },
                            { text: "Subgroup2", id:2}
                        ]
                    }
                ];

            var node2 = [
                {
                    text : "TreeRoot",
                    id:0,
                    items: [
                        { text: "Subgroup3" ,
                        id:3}
                    ]
                }
            ];


            var node3 = [
                {
                    text : "TreeRoot",
                     id:0,
                    items: [
                        {
                            text : "Subgroup2",
                            id:2,
                            items: [
                                {
                                    text : "subgroup6",
                                    id:6,
                                    items: [
                                        {
                                            text : "subgroup7",
                                            id:7,
                                            items: [
                                                {
                                                    text: "subgroup8",
                                                    id:8
                                                }
                                            ]
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ];
对于上面的例子,我最初应该只看到树根。当展开时,我应该只看到子1,2,3。。。当子群2展开时,我应该可以看到子群6,7,8


我需要唯一的父节点和子节点。。如果我使用上面的结构,我会得到两个子节点,名为-subsub3

,尽管您将其标记为剑道UI,但实际上这是一个编程问题,因为没有剑道接口来解决它(我知道您想使用它来合并
treeview
节点),但使用递归解决它并不困难

这基本上是您的三个节点:

var node1 = [
    { text   : "TreeRoot",
        items: [
            { text: "Subgroup1" },
            { text: "Subgroup2" }
        ]
    }
];

var node2 = [
    {
        text : "TreeRoot",
        items: [
            { text: "Subgroup3" }
        ]
    }
];


var node3 = [
    {
        text : "Subgroup3",
        items: [
            {
                text : "subgroup5",
                items: [
                    {
                        text : "subgroup6",
                        items: [
                            {
                                text : "subgroup7",
                                items: [
                                    {
                                        text: "subgroup8"
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
];
可以使用以下函数将其合并:

function merge(node1, node2) {
    if (node2 !== null) {
        if (node1.text === node2.text) {
            node1.items = node1.items || [];
            $.each(node2.items, function (idx2, elem2) {
                var found = false;
                // Check that elem does not exist on node1
                $.each(node1.items, function (idx1, elem1) {
                    if (!found && elem1.text === elem2.text) {
                        found = true;
                        merge(elem1, elem2);
                    }
                });
                if (!found) {
                    node1.items.push(elem2);
                }
            });
        } else {
            if (node1.items) {
                $.each(node1.items, function (idx, item) {
                    merge(item, node2);
                });
            }
        }
    }
}
将两个节点合并到第一个节点中

你应该这样调用它:

merge(node1[0], node2[0]);
merge(node1[0], node3[0]);
对于您的场景

注意:我假设每个节点上只有一个元素(即
node0
node1
node2
是数组,但它们只有一个元素)


看到它正在运行

感谢您的解决方案。只要没有冗余的子节点,您的解决方案就可以正常工作。如果是一个冗余的子节点,这会将该子节点添加到一个新节点中,而不是忽略它(它基本上应该忽略这个节点,因为它已经存在于另一个父节点下)…但是,您是否了解这个想法,或者您需要帮助来解决这个特殊情况?答案是一个解决方案还是需要进一步完善?是的,我有一个想法,但我仍然困惑如何将子项附加到现有的父项,如果特定子项的父项已经存在…希望修复冗余节点的情况。检查一下。只需对
merge
函数稍加修改即可。