Javascript 我的For()循环没有';不能完成所有元素 [ { 任务:{id:1,id_父项:“”,,,is_父项:true} }, { 任务:{id:2,id_父项:“”,,,is_父项:true} }, { 任务:{id:3,id\u parent:“1”,is\u parent:false} }, { 任务:{id:4,id\u parent:“2”,is\u parent:false} }, { 任务:{id:5,id\u parent:“1”,is\u parent:false} }, { 任务:{id:6,id\u parent:“1”,is\u parent:true} }, { 任务:{id:7,id\u parent:“2”,is\u parent:false} }, { 任务:{id:8,id\u parent:“2”,is\u parent:true} }, { 任务:{id:9,id\u parent:“1”,is\u parent:true} }, { 任务:{id:10,id\u parent:“9”,is\u parent:false} }, { 任务:{id:11,id\u parent:“9”,is\u parent:false} }, { 任务:{id:12,id_parent:“8”,is_parent:true} }, { 任务:{id:13,id\u parent:“2”,is\u parent:false} }, { 任务:{id:14,id_parent:“6”,is_parent:true} }, { 任务:{id:15,id_parent:“12”,is_parent:true} }, { 任务:{id:16,id\u parent:“15”,is\u parent:false} }, { 任务:{id:17,id\u parent:“8”,is\u parent:false} }, { 任务:{id:18,id\u parent:“15”,is\u parent:false} } ] //返回id_任务的直接子级 //这个直接的孩子是一个家长 this.getDirectChildParent=函数(id\u任务、数组\u任务){ var任务=数组任务; if(数组_任务===未定义){ tasks=this.getAllTasks(); } var allChildParent=[]; 对于(变量i=0;i

Javascript 我的For()循环没有';不能完成所有元素 [ { 任务:{id:1,id_父项:“”,,,is_父项:true} }, { 任务:{id:2,id_父项:“”,,,is_父项:true} }, { 任务:{id:3,id\u parent:“1”,is\u parent:false} }, { 任务:{id:4,id\u parent:“2”,is\u parent:false} }, { 任务:{id:5,id\u parent:“1”,is\u parent:false} }, { 任务:{id:6,id\u parent:“1”,is\u parent:true} }, { 任务:{id:7,id\u parent:“2”,is\u parent:false} }, { 任务:{id:8,id\u parent:“2”,is\u parent:true} }, { 任务:{id:9,id\u parent:“1”,is\u parent:true} }, { 任务:{id:10,id\u parent:“9”,is\u parent:false} }, { 任务:{id:11,id\u parent:“9”,is\u parent:false} }, { 任务:{id:12,id_parent:“8”,is_parent:true} }, { 任务:{id:13,id\u parent:“2”,is\u parent:false} }, { 任务:{id:14,id_parent:“6”,is_parent:true} }, { 任务:{id:15,id_parent:“12”,is_parent:true} }, { 任务:{id:16,id\u parent:“15”,is\u parent:false} }, { 任务:{id:17,id\u parent:“8”,is\u parent:false} }, { 任务:{id:18,id\u parent:“15”,is\u parent:false} } ] //返回id_任务的直接子级 //这个直接的孩子是一个家长 this.getDirectChildParent=函数(id\u任务、数组\u任务){ var任务=数组任务; if(数组_任务===未定义){ tasks=this.getAllTasks(); } var allChildParent=[]; 对于(变量i=0;i,javascript,for-loop,Javascript,For Loop,你好, 我试图创建一个函数,它返回给我一个child数组。 我的问题是,当我使用我的函数时,它可以工作,但它不会给我所选任务的所有子任务,例如当我使用对象时。GetAllChildrenTask(1)它返回:数组[3,5,6,9,14] 但正确的答案应该是:[3,5,6,9,10,11,14]。 我发现了问题,但不知道如何解决 [ { task : { id : 1, id_parent : "", , is_parent : true }

你好,
我试图创建一个函数,它返回给我一个child数组。 我的问题是,当我使用我的函数时,它可以工作,但它不会给我所选任务的所有子任务,例如当我使用对象时。GetAllChildrenTask(1)
它返回:
数组[3,5,6,9,14]
但正确的答案应该是:[3,5,6,9,10,11,14]。
我发现了问题,但不知道如何解决

[
    { 
        task : { id : 1,    id_parent : "",     , is_parent : true      } 
    },
    { 
        task : { id : 2,    id_parent : "",     , is_parent : true      } 
    },
    { 
        task : { id : 3,    id_parent : "1",    , is_parent : false     } 
    },
    { 
        task : { id : 4,    id_parent : "2",    , is_parent : false     } 
    },
    { 
        task : { id : 5,    id_parent : "1",    , is_parent : false     } 
    },
    { 
        task : { id : 6,    id_parent : "1",    , is_parent : true      } 
    },
    { 
        task : { id : 7,    id_parent : "2",    , is_parent : false     } 
    },
    { 
        task : { id : 8,    id_parent : "2",    , is_parent : true      } 
    },
    { 
        task : { id : 9,    id_parent : "1",    , is_parent : true      } 
    },
    { 
        task : { id : 10, id_parent : "9",  , is_parent : false     } 
    },
    { 
        task : { id : 11, id_parent : "9",  , is_parent : false     } 
    },
    { 
        task : { id : 12, id_parent : "8",  , is_parent : true      } 
    },
    { 
        task : { id : 13, id_parent : "2",  , is_parent : false     } 
    },
    { 
        task : { id : 14, id_parent : "6",  , is_parent : true      } 
    },
    { 
        task : { id : 15, id_parent : "12", , is_parent : true      } 
    },
    { 
        task : { id : 16, id_parent : "15",     , is_parent : false     } 
    },
    { 
        task : { id : 17, id_parent : "8",  , is_parent : false     } 
    },
    { 
        task : { id : 18, id_parent : "15",     , is_parent : false     } 
    }
]    
// return direct child of the id_task
    // where this direct child is a prent
    this.getDirectChildParent = function(id_task, array_tasks){
        var tasks = array_tasks;
        if (array_tasks === undefined) {
            tasks = this.getAllTasks();
        }
        var allChildParent = [];
        for (var i = 0; i < tasks.length; i++) {
            var task = tasks[i].task;
            if(task.is_parent && task.id_parent == id_task) allChildParent.push(task.id);
        }
        return allChildParent;
    }

    // return direct child of the id_task
    // where this direct child is not a prent
    this.getDirectNotParentChild = function(id_task, array_tasks){
        var tasks = array_tasks;
        if (array_tasks === undefined) {
            tasks = this.getAllTasks();
        }
        var allDirectChild = [];
        for (var i = 0; i < tasks.length; i++) {
            var task = tasks[i].task;
            if(!task.is_parent && task.id_parent == id_task) {
                allDirectChild.push(task.id);
                /*tasks.splice(i, 1);
                i--;*/
            }
        }
        return allDirectChild;
    }
this.getAllChilderenTask = function(id_task, array_tasks){
        var id_child = [];
        var tasks = array_tasks;

        if (array_tasks === undefined) {
            tasks = this.getAllTasks();
        }

        id_child = id_child.concat(this.getDirectNotParentChild (id_task, tasks));
        id_child_parent = this.getDirectChildParent (id_task, tasks);
        id_child = id_child.concat(id_child_parent);

        if(id_child_parent.length != 0){
            for (var i = 0; i < id_child_parent.length; i++) {
                id_child = id_child.concat( this.getAllChilderenTask (id_child_parent[i], tasks) );
            }
        }

        return id_child;
    }
if(id\u child\u parent.length!=0){
对于(变量i=0;i
它仅针对第一个元素(WTF)循环。
如果我从循环中删除id_child,它将在所有元素上循环,我将使用递归方法(getAllChildrenTask)。

你知道吗?

伙计们, 我的错误是,在我的递归方法中,我使用了一个变量id\u parent\u child,就像一个全局变量一样,所以当我的程序每次工作时,它调用相同的方法,这个变量就改变了。 解决方案是添加var id_child_parent=[]
作为局部方法变量

if(id_child_parent.length != 0){
            for (var i = 0; i < id_child_parent.length; i++) {
                id_child = id_child.concat( this.getAllChilderenTask (id_child_parent[i], tasks) );
            }
        }
this.getAllChildrenTask=函数(id\u任务、数组\u任务){
变量id_child=[];
变量id_child_parent=[];
var任务=数组任务;
if(数组_任务===未定义){
tasks=this.getAllTasks();
}
id_child=id_child.concat(this.getDirectNotParentChild(id_任务,任务));
id\u child\u parent=this.getDirectChildParent(id\u任务,任务);
id\u child=id\u child.concat(id\u child\u parent);
if(id\u child\u parent.length!=0){
对于(变量i=0;i

就这些。:)

您应该制作一个js提琴来显示您的输出和预期的输出。如果检查长度,则不需要将for循环包装在一个。for循环
i
的中间子句已经确保了如果长度为0,循环将不会运行。使用开发人员工具调试(点击f12查看控制台)。#报废可乐,我真的忘记了他们的代码。无论如何谢谢你
    this.getAllChilderenTask = function(id_task, array_tasks){
            var id_child = [];
            var id_child_parent = [];
            var tasks = array_tasks;

            if (array_tasks === undefined) {
                tasks = this.getAllTasks();
            }

            id_child = id_child.concat(this.getDirectNotParentChild (id_task, tasks));
            id_child_parent = this.getDirectChildParent (id_task, tasks);
            id_child = id_child.concat(id_child_parent);

            if(id_child_parent.length != 0){
                for (var i = 0; i < id_child_parent.length; i++) {
                    id_child = id_child.concat( this.getAllChilderenTask (id_child_parent[i], tasks) );
                }
            }

            return id_child;
        }