2016-08-17 6 views
-2

私はオブジェクトの配列を持っています。javascript - 多次元配列からフラグされた要素を再帰的に削除する

sTree = [{ 
    Tree: [{ 
     Tree: [{ 
     }], 
     Leafs:[{},{},{}] 
    }], 
    Leafs:[{},{},{}] 
} 

これは古典的な(そして実際の)ツリーです。
各オブジェクトはDOMオブジェクト内に参照を持ちます($(obj).data("ref",obj)を使用)。 |この部分が完了しました|

UIの一部にobj.deleted = trueというフラグが付きます。
|この部分が完了しました|

ユーザーが完了すると、deleted=trueにフラグが設定されていないアイテムを返信します。sTree

はどのようにそれを行うことができますか?

ありがとう

答えて

1

再帰で行います。構造をループし、このようなすべての項目をチェックしてください。

function cleanTree(tree){ 
    for(var i in tree){ 
    if(tree[i].deleted){ 
     // debug output 
     console.log('delete '+tree[i].toString()); 
     delete tree[i]; 
    }else{ 
     // debug output 
     console.log('look at '+tree[i].toString()); 
     tree[i] = cleanTree(tree[i]); 
    } 
    } 
    return tree; 
} 

あなたの構造と連携するためのループビットの内部を変更する必要があります。

+0

要素を削除しないので、 'delete'はjavascriptでは機能しません。それはnullにその値を設定します – yossi

+1

私はそうは思わないhttps://jsfiddle.net/z2b1kpcy/ – Marcus

+0

最初に - ありがとう!私は今それをチェックする – yossi

関連する問題