Ik heb een Javascript-object zoals:
var my_object = { a:undefined, b:2, c:4, d:undefined };
Hoe verwijder ik alle ongedefinieerde eigenschappen? Valse attributen moeten blijven.
Antwoord 1, autoriteit 100%
Je kunt eenvoudig _.omit()
koppelen aan _.isUndefined
en _.isNull
composities, en het resultaat krijgen met luie evaluatie .
var result = _(my_object).omit(_.isUndefined).omit(_.isNull).value();
Update 14 maart 2016:
Zoals vermeld door dylantsin het commentaargedeelte, moet u de _.omitBy()
functie omdat het een predikaat gebruikt in plaats van een eigenschap. Je moet dit gebruiken voor lodash versie 4.0.0
en hoger.
var result = _(my_object).omitBy(_.isUndefined).omitBy(_.isNull).value();
Update 1 juni 2016:
Zoals commentaar van Max Truxa, lodash heeft al een alternatief gegeven _.isNil
, die controleert op zowel null
als undefined
:
var result = _.omitBy(my_object, _.isNil);
Antwoord 2, autoriteit 84%
Als u alle falsey-waarden wilt verwijderen, is de meest compacte manier:
Voor Lodash 4.x en hoger:
_.pickBy({ a: null, b: 1, c: undefined }, _.identity);
>> Object {b: 1}
Voor erfenisLodash 3.x:
_.pick(obj, _.identity);
_.pick({ a: null, b: 1, c: undefined }, _.identity);
>> Object {b: 1}
Antwoord 3, autoriteit 17%
Het juiste antwoord is:
_.omitBy({ a: null, b: 1, c: undefined, d: false }, _.isNil)
Dat resulteert in:
{b: 1, d: false}
Het alternatief dat hier door andere mensen is gegeven:
_.pickBy({ a: null, b: 1, c: undefined, d: false }, _.identity);
Verwijdert ook false
waarden die hier niet gewenst zijn.
Antwoord 4, autoriteit 14%
als je lodash gebruikt, kun je _.compact(array)
gebruiken om alle foutieve waarden uit een array te verwijderen.
_.compact([0, 1, false, 2, '', 3]);
// => [1, 2, 3]
https://lodash.com/docs/4.17.4#compact
Antwoord 5, autoriteit 2%
Ik kwam een soortgelijk probleem tegen met het verwijderen van undefined
van een object (diep), en ontdekte dat als je OK bent om je gewone oude object te converteren en JSON te gebruiken, een snelle en vuile helperfunctie eruit zou zien zoals dit:
function stripUndefined(obj) {
return JSON.parse(JSON.stringify(obj));
}
“…Indien niet gedefinieerd, een functie of een symbool wordt aangetroffen tijdens de conversie, wordt het ofwel weggelaten (wanneer het wordt gevonden in een object) of gecensureerd tot null (wanneer het wordt gevonden in een array).”
p>
Antwoord 6, autoriteit 2%
Aangezien sommigen van jullie misschien op de vraag zijn gekomen die specifiek alleenundefined
wil verwijderen, kun je het volgende gebruiken:
-
een combinatie van Lodash-methoden
_.omitBy(object, _.isUndefined)
-
het
rundef
-pakket, dat alleenundefined
eigenschappenrundef(object)
Als u recursiefundefined
-eigenschappen moet verwijderen, wordt de rundef
pakket heeft ook een recursive
optie.
rundef(object, false, true);
Zie de documentatievoor meer details.
Antwoord 7
Dit is de lodash-aanpak die ik zou nemen:
_(my_object)
.pairs()
.reject(function(item) {
return _.isUndefined(item[1]) ||
_.isNull(item[1]);
})
.zipObject()
.value()
De functie pairs()verandert het invoerobject in een reeks sleutel/waarde-arrays. U doet dit zodat het gemakkelijker is om reject()te gebruiken om undefined
en null
waarden. Daarna houdt u paren over die niet zijn afgewezen, en deze worden ingevoerd voor zipObject(), die uw object voor u reconstrueert.
Antwoord 8
Rekening houdend met undefined == null
kunnen we als volgt schrijven:
let collection = {
a: undefined,
b: 2,
c: 4,
d: null,
}
console.log(_.omit(collection, it => it == null))
// -> { b: 2, c: 4 }
Antwoord 9
Ongedefinieerde, null en lege tekenreeks van object verwijderen
_.omitBy(object, (v) => _.isUndefined(v) || _.isNull(v) || v === '');
Antwoord 10
U kunt ook Object.entries gebruiken met Array.prototype.filter .
const omitNullish = (object) =>
Object.fromEntries(
Object.entries(object).filter(([, value]) => value != null)
)
omitNullish({ a: null, b: 1, c: undefined, d: false, e: 0 }) // { b: 1, d: false, e: 0}
Als je lodash wilt gebruiken, verwijderen ze weglating uit v5, dus een alternatief is om fp/pickBy
te gebruiken samen met isNil
en negate
.
import pickBy from 'lodash/fp/pickBy'
import isNil from 'lodash/isNil';
import negate from 'lodash/negate';
const omitNullish = pickBy(negate(isNil))
omitNullish({ a: null, b: 1, c: undefined, d: false, e: 0 }) // { b: 1, d: false, e: 0}
Antwoord 11
pickBygebruikt identiteitstandaard:
_.pickBy({ a: null, b: 1, c: undefined, d: false });
Antwoord 12
Ik gebruik graag _.pickBy, omdat je volledige controle hebt over wat je verwijdert:
var person = {"name":"bill","age":21,"sex":undefined,"height":null};
var cleanPerson = _.pickBy(person, function(value, key) {
return !(value === undefined || value === null);
});
Bron: https://www.codegrepper. com/?search_term=lodash+remove+undefined+values+from+object
Antwoord 13
Kortste weg (lodash v4):
_.pickBy(my_object)
Antwoord 14
Met lodash (of onderstrepingsteken) U mag doen
var my_object = { a:undefined, b:2, c:4, d:undefined, e:null };
var passedKeys = _.reject(Object.keys(my_object), function(key){ return _.isUndefined(my_object[key]) || _.isNull(my_object[key]) })
newObject = {};
_.each(passedKeys, function(key){
newObject[key] = my_object[key];
});
Anders, met vanille JavaScript, kunt u doen
var my_object = { a:undefined, b:2, c:4, d:undefined };
var new_object = {};
Object.keys(my_object).forEach(function(key){
if (typeof my_object[key] != 'undefined' && my_object[key]!=null){
new_object[key] = my_object[key];
}
});
Gebruik geen falsey-test, omdat niet alleen “undefined” of “null” wordt afgewezen, maar ook andere falsey-waarden zoals “false”, “0 “, lege tekenreeks, {}. Dus, om het eenvoudig en begrijpelijk te maken, heb ik ervoor gekozen om expliciete vergelijking te gebruiken zoals hierboven gecodeerd.
Antwoord 15
Om alle falseywaarden weg te laten maarde booleaanse primitieven te behouden, helpt deze oplossing.
_.omitBy(fields, v => (_.isBoolean(v)||_.isFinite(v)) ? false : _.isEmpty(v));
let fields = {
str: 'CAD',
numberStr: '123',
number : 123,
boolStrT: 'true',
boolStrF: 'false',
boolFalse : false,
boolTrue : true,
undef: undefined,
nul: null,
emptyStr: '',
array: [1,2,3],
emptyArr: []
};
let nobj = _.omitBy(fields, v => (_.isBoolean(v)||_.isFinite(v)) ? false : _.isEmpty(v));
console.log(nobj);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>
Antwoord 16
var my_object = { a:undefined, b:2, c:4, d:undefined };
var newObject = _.reject(my_collection, function(val){ return _.isUndefined(val) })
//--> newCollection = { b: 2, c: 4 }
Antwoord 17
Ik zou underscore gebruiken en ook voor lege tekenreeksen zorgen:
var my_object = { a:undefined, b:2, c:4, d:undefined, k: null, p: false, s: '', z: 0 };
var result =_.omit(my_object, function(value) {
return _.isUndefined(value) || _.isNull(value) || value === '';
});
console.log(result); //Object {b: 2, c: 4, p: false, z: 0}
Antwoord 18
Voor diep geneste objecten en arrays. en sluit lege waarden uit van string en NaN
function isBlank(value) {
return _.isEmpty(value) && !_.isNumber(value) || _.isNaN(value);
}
var removeObjectsWithNull = (obj) => {
return _(obj).pickBy(_.isObject)
.mapValues(removeObjectsWithNull)
.assign(_.omitBy(obj, _.isObject))
.assign(_.omitBy(obj, _.isArray))
.omitBy(_.isNil).omitBy(isBlank)
.value();
}
var obj = {
teste: undefined,
nullV: null,
x: 10,
name: 'Maria Sophia Moura',
a: null,
b: '',
c: {
a: [{
n: 'Gleidson',
i: 248
}, {
t: 'Marta'
}],
g: 'Teste',
eager: {
p: 'Palavra'
}
}
}
removeObjectsWithNull(obj)
resultaat:
{
"c": {
"a": [
{
"n": "Gleidson",
"i": 248
},
{
"t": "Marta"
}
],
"g": "Teste",
"eager": {
"p": "Palavra"
}
},
"x": 10,
"name": "Maria Sophia Moura"
}
Antwoord 19
Voor degenen onder u die hier komen en uit een reeks objecten willen verwijderen en lodash gebruiken, kunt u zoiets als dit doen:
const objects = [{ a: 'string', b: false, c: 'string', d: undefined }]
const result = objects.map(({ a, b, c, d }) => _.pickBy({ a,b,c,d }, _.identity))
// [{ a: 'string', c: 'string' }]
Opmerking:je hoeft niet te vernietigen als je dat niet wilt.
Antwoord 20
Als u false
waarden niet wilt verwijderen. Hier is een voorbeeld:
obj = {
"a": null,
"c": undefined,
"d": "a",
"e": false,
"f": true
}
_.pickBy(obj, x => x === false || x)
> {
"d": "a",
"e": false,
"f": true
}
Antwoord 21
Ik was in staat om dit te doen in diepe objecten die arrays bevatten met slechts één lodash-functie, transform
.
Houd er rekening mee dat de dubbel-ongelijke (!= null) opzettelijk is, aangezien deze ook zal overeenkomen met ongedefinieerd, evenals het type ‘object’-controle, aangezien deze overeenkomt met zowel object als array.
Dit is alleen voor gebruik met platte data-objecten die geen klassen bevatten.
const cloneDeepSanitized = (obj) =>
Array.isArray(obj)
? obj.filter((entry) => entry != null).map(cloneDeepSanitized)
: transform(
obj,
(result, val, key) => {
if (val != null) {
result[key] =
typeof val === 'object' ? cloneDeepSanitized(val) : val;
}
},
{},
);
Antwoord 22
Je kunt lodash gebruiken om null en ongedefinieerde objecten te verwijderen, maar je moet weten welke lodash methode je moet gebruiken, veel ontwikkelaars gebruiken isNil om de Null en ongedefinieerde objecten te verwijderen, maar deze functie verwijdert niet de lege objecten (‘ ‘)
u kunt isEmpty gebruiken om Null , Undefined en
. te verwijderen
import pickBy from 'lodash/fp/pickBy'
import negate from 'lodash/negate';
import isEmpty from 'lodash/isEmpty';
const omitNullish = pickBy(negate(isEmpty));
addressObject = {
"a": null,
"c": undefined,
"d": "",
"e": "test1",
"f": "test2
}
const notNullObjects = omitNullish(addressObject);
console.log(notNullObjects);
je hebt dit object : {
“e”: “test1”,
“f”: “test2
}