2017-09-06 8 views
-1

은 내가 lodash의 _.reduce, _.pick, 또는 _.omit를 사용하지 않으 유의하시기 바랍니다lodash 필터를 사용하여 값이 정의되지 않은 javascript 객체에서 속성을 제거하는 방법은 무엇입니까?

var substitutionValues = { one: "hi", two: undefined, three: 3}; 
var keys = _.keys(substitutionValues); 

for (var i = 0; i < keys.length; i++) { 
    if (substitutionValues[keys[i]] === undefined) { 
    delete substitutionValues[keys[i]]; 
    } 
} 

// => { one: "hi", three: 3 } 

_.filter lodash를 사용하여 뭔가에 다음 코드를 변환하려합니다.

+0

'pickBy'를 체크 아웃 할 수 있습니다. 객체 속성을 반복하는 동안 조건을 지정할 수 있으며이를 사용하여 정의되지 않은 키를 필터링 할 수 있습니다. https://lodash.com/docs/4.17.4#pickBy – Matthew

+2

필터 –

+0

에 대한 끔찍한 사용 사례이 관련 stackoverflow 게시물을 확인하십시오. https://stackoverflow.com/questions/30726830/how-to- filter-keys-of-object-with-lodash – Matthew

답변

1

_.pickBy()을 개체 필터로 사용할 수 있습니다. _.pickBy()의 기본 술어는 _.identity이므로 모든 위변조 값을 필터링합니다 (첫 번째 예). 좀 더 구체적으로 할 경우, 그에 따라 (2 예) 콜백을 정의

var substitutionValues = { one: "hi", two: undefined, three: 3, four: null }; 
 

 
/** 1st example **/ 
 
var widthoutAllFalsyValues = _.pickBy(substitutionValues); 
 

 
console.log(widthoutAllFalsyValues); 
 

 
/** 2nd example **/ 
 
var widthoutUndefined = _.pickBy(substitutionValues, _.negate(_.isUndefined)); 
 

 
console.log(widthoutUndefined);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

뭔가의 사용 등에 의해 배열로 객체를 변환 필터를 당신이해야 사용하려면 _.entries() (키를 보존), 다음 항목을 필터링 및 오브젝트로 감소 :

var substitutionValues = { one: "hi", two: undefined, three: 3, four: null }; 
 

 
var result = _(substitutionValues) 
 
    .entries() 
 
    .filter(([k, v]) => !_.isUndefined(v)) 
 
    .reduce((o, [k, v]) => { 
 
    o[k] = v; 
 
    return o; 
 
    }, {}); 
 
    
 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

,