[javascript] lodash를 사용하여 객체에서 정의되지 않은 null 값을 제거하는 방법은 무엇입니까?

다음과 같은 Javascript 객체가 있습니다.

var my_object = { a:undefined, b:2, c:4, d:undefined };

정의되지 않은 속성을 모두 제거하는 방법? 거짓 속성은 유지해야합니다.



답변

모든 잘못된 값 을 제거 하려면 가장 간단한 방법은 다음과 같습니다.

내용은 나중에 Lodash 4.x 및 :

_.pickBy({ a: null, b: 1, c: undefined }, _.identity);
>> Object {b: 1}

대한 기존 Lodash 3.x를 :

_.pick(obj, _.identity);

_.pick({ a: null, b: 1, c: undefined }, _.identity);
>> Object {b: 1}


답변

간단히 컴포지션 _.omit()과 연결 _.isUndefined하고 _.isNull게으른 평가로 결과를 얻을 수 있습니다.

데모

var result = _(my_object).omit(_.isUndefined).omit(_.isNull).value();

2016 년 3 월 14 일 업데이트 :

주석 섹션에서 dylants 가 언급했듯이 , _.omitBy()함수 대신 속성을 사용하므로 함수를 사용해야합니다 . lodash 버전 4.0.0이상에서 사용해야합니다 .

데모

var result = _(my_object).omitBy(_.isUndefined).omitBy(_.isNull).value();

2016 년 6 월 1 일 업데이트 :

하여 주석 같이 최대 Truxa 이미 대체 제공 lodash _.isNil모두에 대한 검사 nullundefined:

var result = _.omitBy(my_object, _.isNil);


답변

lodash를 사용 _.compact(array)하는 경우 배열에서 모든 잘못된 값을 제거 하는 데 사용할 수 있습니다 .

_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]

https://lodash.com/docs/4.17.4#compact


답변

정답은 다음과 같습니다.

_.omitBy({ a: null, b: 1, c: undefined, d: false }, _.isNil)

결과는 다음과 같습니다.

{b: 1, d: false}

다른 사람들이 여기에 준 대안 :

_.pickBy({ a: null, b: 1, c: undefined, d: false }, _.identity);

false여기서 원하지 않는 값 도 제거 합니다.


답변

다만:

_.omit(my_object, _.isUndefined)

위의 null값은 원래 예제에서 누락되어 주제에서만 언급되었으므로 값 을 고려하지 않지만 우아하고 용도가있을 수 있으므로 그대로 둡니다.

다음은 완전한 예이며 간결하지는 않지만보다 완전한 예입니다.

var obj = { a: undefined, b: 2, c: 4, d: undefined, e: null, f: false, g: '', h: 0 };
console.log(_.omit(obj, function(v) { return _.isUndefined(v) || _.isNull(v); }));


답변

다른 답변을 완료하려면 lodash 4에서 undefined 및 null 만 무시하고 (와 같은 속성은 false제외) 다음 과 같은 술어를 사용할 수 있습니다 _.pickBy.

_.pickBy(obj, v !== null && v !== undefined)

아래 예 :

const obj = { a: undefined, b: 123, c: true, d: false, e: null};

const filteredObject = _.pickBy(obj, v => v !== null && v !== undefined);

console.log = (obj) => document.write(JSON.stringify(filteredObject, null, 2));
console.log(filteredObject);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.js"></script>


답변

lodash 문서에 따르면 :

_.compact(_.map(array, fn))

또한 모든 null을 필터링 할 수 있습니다