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
