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

My recursive function not properly remove all children

此代码删除所有容器的 children,并设置每个 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循环。我怎样才能同时删除 children?

的级别
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;
            }
        }
    }
}

你也应该在递归调用返回后调用 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]);
    }
}