我的For()循环不能完成所有元素JS

时间:2015-05-02 21:50:20

标签: javascript for-loop

[
    { 
        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;
    }

您好,
我试图制作一个让我回到一个孩子阵容的功能。 我的问题是,当我使用我的功能时,它可以工作,但它并没有给我所有选择的孩子,例如当我做了object.getAllChilderenTask(1)它返回: 但正确的应该是:[3,5,6,9,10,11,14] 我发现了问题,但我不知道如何修复它。

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) );
            }
        }

它仅循环第一个元素(WTF) 如果我从循环中删除id_child,它会在所有元素上循环,我使用递归方法(getAllChilderenTask)。

你有什么想法吗?

0 个答案:

没有答案