javascript - Hvordan fjerne undefined og null verdier fra et objekt ved bruk av lodash?


Jeg har et Javascript-objekt som:

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

Hvordan fjerne alle de udefinerte egenskapene? Falske attributter skal forbli.

Svar #1

Du kan enkelt kjede _.omit() med _.isUndefined og _.isNull komposisjoner, og få resultatet med treg evaluering.

Demo

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

Oppdatering 14. mars 2016:

Som nevnt av dylants i kommentarfeltet, bør du bruke _.omitBy()-funksjonen siden den bruker en predikat i stedet for en egenskap. Du bør bruke dette for lodash-versjon 4.0.0 og nyere.

DEMO

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

Oppdatering 1. juni 2016:

Som kommentert av Max Truxa, tilbyr lodash allerede et alternativ _.isNil, som sjekker både for null og undefined:

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

Svar #2

Hvis du vil fjerne alle falsey-verdier, er den mest kompakte måten:

For Lodash 4.x og senere:

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

For gammel Lodash 3.x:

_.pick(obj, _.identity);

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

Svar #3

Det riktige svaret er:

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

Det resulterer i:

{b: 1, d: false}

Alternativet gitt her av andre folk:

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

Vil også fjerne false-verdier, noe som ikke er ønskelig her.

Svar #4

hvis du bruker lodash, kan du bruke _.compact(array) for å fjerne alle falske verdier fra et array.

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

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

Svar #5

Bare :

_.omit(my_object, _.isUndefined)

Ovenstående tar ikke hensyn til null-verdier, siden de mangler i det opprinnelige eksemplet og kun nevnes i emnet, men jeg lar det være som det er, da det er elegant og kan ha sin bruk.

Her er det komplette eksemplet, mindre konsist, men mer komplett.

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); }));

Svar #6

For å fullføre de andre svarene, i lodash 4, for å ignorere kun undefined og null (og ikke egenskaper som false) kan du bruke en predikat i _.pickBy:

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

Eksempel nedenfor :

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>

Svar #7

I følge lodash-dokumentasjonen:

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

Du kan også filtrere ut alle nuller

Relaterte artikler