Convert parent-child array to tree

前端 未结 7 1874
感动是毒
感动是毒 2020-12-04 22:31

Can anyone help converting the following list of parent-child objects:

[
   {
      \"name\":\"root\",
      \"_id\":\"root_id\",
   },
   {
      \"name\":\"a1\"         


        
7条回答
  •  借酒劲吻你
    2020-12-04 23:00

    There is an error in your string

    a[p].children.push(t);
    

    It should be

    a[p].children.push(child);
    

    also I'm little optimize it:

    var data = [{"id":1,"name":"X","parentId":null},{"id":2,"name":"Y","parentId":1},{"id":3,"name":"D","parentId":2},{"id":2,"name":"S","parentId":1},{"id":5,"name":"K","parentId":4}]
        var obj = {};
        obj.rootElements = [];
        for (i in data) {
            var _elem = data[i];
            if (_elem.parentId) {
                var _parentId = _elem.parentId;
                if (_parentId == _elem.id) {
                    // check children, if false - add
                    if (!_elem.children) {
                        _elem.children = [];
                    }
                    _elem.children.push(_elem);
                }
                else {
                    addChildToParent(_elem, _parentId);
                }
            }
            else // is root
            {
                obj.rootElements.push(_elem);
            }
        }
        function addChildToParent(child, parentId, root) {
            for (j in data) {
                if (data[j].id.toString() == parentId.toString()) {
                    if (!data[j].children) {
                        data[j].children = [];
                    }
                    data[j].children.push(child);
                }
            }
        }
        res.send(obj.rootElements); 
    

提交回复
热议问题