如何在Javascript中形成嵌套对象

如何在Javascript中形成嵌套对象,javascript,treeview,Javascript,Treeview,我正在尝试使用JavaScript动态形成一个嵌套的树对象,如下所示,有人能告诉我实现这一点的最佳方法吗 var contextpath= { text: "TreeRoot", items: [ { text: "subgroup1" , items: [ { text: "subgroup2", items: [ {

我正在尝试使用JavaScript动态形成一个嵌套的树对象,如下所示,有人能告诉我实现这一点的最佳方法吗

 var contextpath= {
        text: "TreeRoot",
        items: [ {
            text: "subgroup1" ,
            items: [ {
                text: "subgroup2",
                items: [ {
                    text: "subgroup3",
                    items: [ {
                        text: "subgroup4",
                        items: [ {
                            text: "subgroup5"
                        }]
                    }]
                }]
            }]
        }]
    };
我已将试图转换为对象的分隔字符串(可以用作树组件的dat源)

var path=“TreeRoot | subgroup1 | subgroup2”

尝试实现如下内容,但使用较少数量的变量进行递归/循环

    var contextpathText= {};
    contextpathText.text ="TreeRoot";

    var childObject={};
    var items=[];
    childObject.text ="subgroup1";
    items.push(childObject);
    contextpathText.items=(items);

您需要一个深度计数器并存储正在处理的对象的当前级别

var obj = {text:''}, parent, child, i = 0;
obj.text = 'TreeRoot';
parent = obj;
while (++i <= 5) {
    if (parent.items === undefined) parent.items = []; // because you don't have an items on the last subgroup you can't put it in the object literal
    child = {text: 'subgroup'+i};
    parent.items.push(child);
    parent = child;
}
parent = child = null; // cleanup
obj;

编辑分隔字符串

var path = 'TreeRoot|subgroup1|subgroup2';

var obj = {text:''}, parent, child, levelText = path.split('|').reverse();
obj.text = levelText.pop() || '';
parent = obj;
while (levelText.length > 0) {
    child = {text: levelText.pop()};
    if (!parent.items) parent.items = [];
    parent.items.push(child);
    parent = child;
}
obj;

比我快,但我遵循以下准则:

var contextpath = { text: "TreeRoot", items: []}

var items = contextpath.items;

for(var i = 1; i <= 5; i++) {
    items.push({ text: "subgroup" + i, items: []});
    items = items[0].items;
}

看起来你做得不错。你到底想要实现什么?创建这个对象?参数是什么?你是否有一个数组要转换成这个数组,你只想创建一个像这样的
n
深对象,或者什么?subgroup2是subgroupofsubgroup1?是的,subgroup2是subgroupofsubgroup1。(即,subgro1是subgro2的父级)您需要多个字符串(坏主意)或多个分隔符(好主意)来定义何时深入树中,何时从该口袋中出来,何时返回其父级(或下一个子级)。非常欢迎您,但是Paul S.的回答更符合你的要求。
var contextpath = { text: "TreeRoot", items: []}

var items = contextpath.items;

for(var i = 1; i <= 5; i++) {
    items.push({ text: "subgroup" + i, items: []});
    items = items[0].items;
}
// snip
                text: "subgroup4",
                    items: [ {
                        text: "subgroup5",
                        items: []
                    }]
// etc.