2013-01-15 1 views
6

다음과 같은 트리 객체가 있습니다. 비어있는 경우 items 배열 속성을 제거하려고합니다. 이 작업을 수행하는 최선의 방법이 확실하지 않습니까?중첩 된 자바 스크립트 개체에서 속성을 제거하는 가장 좋은 방법은 무엇입니까?

키를 반복하면서 속성을 확인한 다음 delete myJSONObject[prop]을 사용하여 제거하는 중 ... 생각/아이디어를 환영합니다?

[{ 
    text: "TreeRoot", 
    items: [{ 
     text: "Subgroup1", 
     items: [] 
    }, { 
     text: "Subgroup2", 
     items: [] 
    }, { 
     text: "Subgroup3", 
     items: [], 
     items: [{ 
      text: "subgroup5", 
      items: [{ 
       text: "subgroup6", 
       items: [{ 
        text: "subgroup7", 
        items: [{ 
         text: "subgroup8", 
         items: [] 
        }] 
       }] 
      }] 
     }] 
    }] 
}] 
+0

나는 BU 것 : ES6에서

function removeEmpty(obj) { Object.keys(obj).forEach(function(key) { (key === 'items' && obj[key].length === 0) && delete obj[key] || (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) }); return obj; }; 

JSBIN

같은 새 객체를 수정하는 대신이 객체를 수정하십시오. –

+0

이봐, 너 아직 해결 했니? – Gideon

+0

http://stackoverflow.com/questions/9446426/how-do-you-recursively-remove-nested-objects-that-contain-an-empty-array – J4S0Nc

답변

1

각 단계 items 배열 복귀를 제거하거나 반복적 어레이의 각각의 오브젝트를 처리하거나 재귀 알고리즘을 가질 수있다.

또한 서버 쪽에서이 작업을 수행하려고합니다. 복잡성, 메모리 및 처리 시간이 많이 절약됩니다. 일반적으로 JSON 인코딩 된 문자열에서 빈 배열을 "제외"하는 방법이 있습니다.

1

이이 일 (ES5) 수행해야합니다

const removeEmpty = (obj) => { 
    Object.keys(obj).forEach(key => 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
); 
    return obj; 
}; 

JSBIN