我的递归函数没有正确删除所有孩子

时间:2017-03-31 06:45:54

标签: javascript recursion appcelerator appcelerator-titanium

此代码删除所有容器的子代,并设置每个children = null以释放内存。 myElement 的结构并不总是一样的,所以我想要一个动态的东西。

var cont1 = myElement.children.length;
for(var i = cont1 - 1 ; i >= 0 ; i--){
    var cont2 = myElement.children[i].children.length;
    for (var j = cont2 - 1; j >= 0; j--) {
        var cont3 = myElement.children[i].children[j].children.length;
        for (var k = cont3 - 1; k >= 0; k--) {
            var cont4 = myElement.children[i].children[j].children[k].children.length;
            for (var w = cont4 - 1; w >= 0; w--) {
                myElement.children[i].children[j].children[k].remove(myElement.children[i].children[j].children[k].children[w]);
                myElement.children[i].children[j].children[k].children[w] = null;
            }
            myElement.children[i].children[j].remove(myElement.children[i].children[j].children[k]);
            myElement.children[i].children[j].children[k] = null;
        }
        myElement.children[i].remove(myElement.children[i].children[j]);
        myElement.children[i].children[j] = null;
    }
    myElement.remove(myElement.children[i]); //i loop
    myElement.children[i] = null; //i loop
}

这是我的递归测试功能。 似乎只是部分工作。第一级不会被删除,它将是旧代码的 i 循环。我怎样才能删除那个级别的孩子?

function deleteRecursive(element){
    if(element.children.length > 0){
        for(var i = element.children.length - 1 ; i >= 0 ; i--){
            if(element.children[i].children.length > 0){
                deleteRecursive(element.children[i]);
            }else{
                element.remove(element.children[i]);
                element.children[i] = null;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

从递归呼叫回来后,您也应该呼叫remove

注意:第一个if不是必需的,因为for循环已经检查了这个条件。并且你可以在递归调用函数之前删除你做的类似检查,因为递归调用将在for循环中检查它:

function deleteRecursive(element){
    for(var i = element.children.length - 1 ; i >= 0 ; i--){
        deleteRecursive(element.children[i]);
        element.remove(element.children[i]);
    }
}