我正在处理一个输出深度未知的树状对象的函数。

这是我到目前为止的内容:

function recursive(obj) {
    if ($.type(obj.children) == 'undefined') {
        return "<ul><li>"+obj.name+"</li></ul>";
    }

    return "<ul><li>" +obj.name+"</li>" + recursive(obj.children) + "</ul>";
}

var x = recursive(obj1);
console.log(x);


这对于没有兄弟姐妹的对象非常有效,例如:

var obj1 = {
    name:'product 1',
    children: {
        name:'product 2',
        children: {
            name:'product 3'
        }
    }
}


它输出:


  
      产品1
      
          产品2
          
              产品3
          
       


我需要的是一个递归函数(我想里面有一个循环),它也能够输出对象数组。兄弟姐妹基本上。

这是一个示例对象,我正在尝试实现以下输出:

var tree =
[{
        name:'product 1'
    }, {
        name:'product 2',
        children: [{
            name:'product 3',
            children: {
                name:'product 4',
                children: {
                    name:'product 5'
                }
            }
        }, {
            name:'product 6'
        }, {
            name:'product 7'
        }]
    }, {
        name:'product 8'
}];


那应该产生以下输出:


  
      产品1
      产品2
      
          产品3
          
              产品4
              
                  产品5
              
          
          产品6
          产品7
      
      产品8


有人可以帮忙吗?谢谢。

最佳答案

该解决方案使用在给定数组上进行迭代并组成所需组成的函数进行递归工作。如果参数不是数组,则使用该参数创建一个数组并对该数组进行迭代。



function getTree(array) {
    return '<ul>' + (Array.isArray(array) ? array : [array]).map(function (a) {
        var r = a.name;
        if ('children' in a) {
            r += getTree(a.children);
        }
        return '<li>' + r + '</li>';
    }).join('') + '</ul>'
}


var tree = [{ name: 'product 1' }, { name: 'product 2', children: [{ name: 'product 3', children: { name: 'product 4', children: { name: 'product 5' } } }, { name: 'product 6' }, { name: 'product 7' }] }, { name: 'product 8' }];
document.write(getTree(tree));

关于javascript - 输出树状对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36250029/

10-12 12:47
查看更多