Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过数组位置查找子级的javascript递归_Javascript_Recursion - Fatal编程技术网

通过数组位置查找子级的javascript递归

通过数组位置查找子级的javascript递归,javascript,recursion,Javascript,Recursion,我有一大堆任务,我需要根据我单击的任务查找所有子项。我希望返回一个位置[1,2,3]数组,以便处理这些行 这里有一个例子 var taskAR = [ { "isParent": true, "parentID": null, "level": 0 }, { "isParent": true, "parentID": 0, "level": 1 }, {

我有一大堆任务,我需要根据我单击的任务查找所有子项。我希望返回一个位置[1,2,3]数组,以便处理这些行

这里有一个例子

    var taskAR = [
    {
        "isParent": true,
        "parentID": null,
        "level": 0
    },
    {
        "isParent": true,
        "parentID": 0,
        "level": 1
    },
    {
        "isParent": true,
        "parentID": 1,
        "level": 2
    },
    {
        "isParent": false,
        "parentID": 2,
        "level": 3
    },
    {
        "isParent": false,
        "parentID": 2,
        "level": 3
    },
    {
        "isParent": false,
        "parentID": null,
        "level": 0
    },
    {
        "isParent": true,
        "parentID": null,
        "level": 0
    },
    {
        "isParent": false,
        "parentID": 7,
        "level": 1
    }

];


function getNestedChildren(arr, parentID) {
    var out = []
    for (var x = 0, len = arr.length; x < len ; x++) {
        var d = arr[x];

        if (d.parentID == parentID) {
            var children = getNestedChildren(arr, x);

            if (children.length) {
                d.parentID = x;
            }
            out.push(x)
        }
    }
    return out
    }

   getNestedChildren(this.master.tasks, parentID)
var taskAR=[
{
“isParent”:对,
“parentID”:空,
“级别”:0
},
{
“isParent”:对,
“parentID”:0,
“级别”:1
},
{
“isParent”:对,
“家长ID”:1,
“级别”:2
},
{
“isParent”:错误,
“家长ID”:2,
“级别”:3
},
{
“isParent”:错误,
“家长ID”:2,
“级别”:3
},
{
“isParent”:错误,
“parentID”:空,
“级别”:0
},
{
“isParent”:对,
“parentID”:空,
“级别”:0
},
{
“isParent”:错误,
“家长ID”:7,
“级别”:1
}
];
函数getNestedChildren(arr,parentID){
var out=[]
对于(变量x=0,len=arr.length;x

感谢您的帮助

此代码有两个问题:第一个问题是您没有累积值。您需要在
out
数组中返回对
getNestedChildren
的嵌套调用的输出。第二,我不知道为什么要更改任何
parentID
s当这个运行时,它应该是一个只读操作

取出

        if (children.length) {
            d.parentID = x;
        }
并将其替换为

        out = out.concat(children);

实际问题是什么?而且,您是否有能力更改数据的结构?有比您使用的更好的方法来表示父cheild关系/Yep如果有更好的方法,我可以更改它。这个想法是找到父级的所有子级,然后从找到的数组和显示器上处理它们。我认为问题在于:如果(children.length){d.parentID=x;}我需要在其中放入另一个循环来获得位置吗,在DOM中可以看到一种很好的组织父子关系的方法:一个二叉树,左分支指向第一个子树,右分支指向下一个子树。它可能预示着跳过列表的想法,以消除扁平化的需要。。。