2016-08-17 4 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'가 자바 스크립트에서 작동하지 않습니다. null로 값을 설정합니다 – yossi

+1

이렇게 생각하지 않습니다. https://jsfiddle.net/z2b1kpcy/ – Marcus

+0

첫 번째로 - 감사합니다! 나는 그것을 지금 검사 할 것이다. – yossi

관련 문제