簡體   English   中英

我的遞歸函數無法正確刪除所有子項

[英]My recursive function not properly remove all 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;
            }
        }
    }
}

從遞歸調用返回后,還應該調用remove

注意:第一if是沒有必要的,因為這種情況下是由已被選中for循環。 並且您可以刪除遞歸調用函數之前所做的類似檢查,因為遞歸調用將再次在其for循環中對其for檢查:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM