需要来自提供的数组的父对象

时间:2018-01-17 09:08:22

标签: javascript underscore.js

我有以下对象,如果我发送一些数组,我需要这些对象的父母。

假设我发送{Id:113},它应该返回[11,1]

[  
   {  
      Id:1,
      Name:"Test",
      children:[  
         {  
            Id:11,
            Name:"Test",
            children:[  
               {  
                  Id:113,
                  Name:"Test",
                  children:[  

                  ]
               },
               {  
                  Id:114,
                  Name:"Test",
                  children:[  

                  ]
               }
            ]
         },
         {  
            Id:12,
            Name:"Test",
            children:[  

            ]
         },
         {  
            Id:13,
            Name:"Test",
            children:[  
               {  
                  Id:115,
                  Name:"Test",
                  children:[  
                     {  
                        Id:1111,
                        Name:"Test",
                        children:[  

                        ]
                     }
                  ]
               }
            ]
         },
         {  
            Id:14,
            Name:"Test",
            children:[  

            ]
         }
      ]
   }   {  
      Id:2,
      Name:"Test",
      children:[  

      ]
   }
]

我可以使用以下代码获取每个子项。

this.selectedOMStructure = function (structure, id) {
            _.each(structure, function (_item) {
                if (_item.Id == id) {
                    _item.isChecked = !_item.isChecked;
                    if (_item.children) {
                        _this.checkAllChildren(_item.children, _item.isChecked);
                    } else {
                        return;
                    }
                } else if (_item.children) {
                    _this.selectedOMStructure(_item.children, id);
                }
            })
        }

        this.checkAllChildren = function (structure, value) {
            _.each(structure, function (_item) {
                _item.isChecked = value;
                if (_item.children) {
                    _this.checkAllChildren(_item.children, value);
                } else {
                    return;
                }
            })
        }

但我不知道如何找到提到ID的父母

2 个答案:

答案 0 :(得分:0)

我不确定这是否是一种更好的方法。试试这个,
data将拥有您的阵列。 main()是切入点。该值将存储在a

var a = [];

function main() {
    a = [];
    for (let i = 0; i < data.length; i++) {
        checkChildren(data[i], 1111);
    }
    console.log(a);
}

function checkChildren(node, id) {
    if (node.Id == id) {
        return id;
    }
    else if (node.children) {
        for (let i = 0; i < node.children.length; i++) {
            let r = checkChildren(node.children[i], id);
            if (r != 0) {
                a.push(node.Id);
                return node.Id;
            }
        }
        return 0;
    }
}

main();

答案 1 :(得分:-1)

您需要将此数据结构中的值映射到新的数据结构中。

考虑使用递归算法,将新的父字段附加到每个项目,同时将其添加到从id到项目的地图中。