2017-11-14 3 views
0

중첩 객체가 있고 값이 null이거나 정의되지 않은 경우 모든 키/값 쌍을 제거하려고합니다. 나는 아래 코드가 작동하도록 관리했지만 중첩 된 키/값 쌍을 검사하지 않으며 코드에 추가해야 할 항목이 무엇인지 알아낼 수 있는지 궁금해했다.중첩 된 자바 스크립트 객체의 null 값을 삭제합니다.

var myObj = { 
    fName:'john', 
    lName:'doe', 
    dob:{ 
    displayValue: null, 
    value: null 
    }, 
    bbb:null 
}; 

function clean(obj) { 
    for (var propName in obj) { 
    if (obj[propName] === null || obj[propName] === undefined || obj[propName] === '') { 
     delete obj[propName]; 
    } 
    } 
    return obj; 
} 
console.log(clean(myObj)); 

위의 코드는 'BBB'와 그 값을 제거하는 작업을 수행하고 나뿐만 아니라 '생년월일'로 표현되는 중첩 된 개체에 대해 수행 동일합니다.

https://jsbin.com/mudirateso/edit?js,console,output

어떤 도움

이 크게 감사합니다.

+0

당신이()'하위 개체에 대한'깨끗한 호출하는 재귀 함수를 작성해야합니다. – Barmar

+2

StackOverflow는 [자신의 문제를 먼저 해결하려고합니다.] (http://meta.stackoverflow.com/questions/261592), [숙제에 대한 답변을 제공하지 않습니다] (https : //softwareengineering.meta. stackexchange.com/questions/6166). 질문을 업데이트하여 [최소, 완전하며 검증 가능한 예] (http://stackoverflow.com/help/mcve)에서 이미 시도한 것을 보여주십시오. 자세한 내용은 [좋은 질문을하는 방법] (http://stackoverflow.com/help/how-to-ask)을 참조하고 [사이트 둘러보기] (http://stackoverflow.com/tour)를 참조하십시오.) :) – Barmar

답변

0

당신은 이미 거의 다 왔어요. 그냥 속성이 다른 개체 인 경우 함수 같이 Recurse 있습니다

var myObj = { 
 
    fName:'john', 
 
    lName:'doe', 
 
    dob:{ 
 
    displayValue: null, 
 
    value: null 
 
    }, 
 
    bbb:null 
 
}; 
 

 
function clean(obj) { 
 
    for (var propName in obj) { 
 
    if (obj[propName] === null || obj[propName] === undefined || obj[propName] === '') { 
 
     delete obj[propName]; 
 
    } else if (typeof obj[propName] === "object") { 
 
     // Recurse here if the property is another object. 
 
     clean(obj[propName]) 
 
    } 
 
    } 
 
    return obj; 
 
} 
 
console.log(clean(myObj));

+3

하지만 무한 재귀를 조심하십시오. – SLaks

+0

둘 다 감사합니다! 매우 감사. @CRice – Jayonline

관련 문제