J'ai un objet Javascript comme:
var my_object = { a:undefined, b:2, c:4, d:undefined };
Comment supprimer toutes les propriétés non définies? Les faux attributs doivent rester.
javascript
object
lodash
JLavoie
la source
la source
_.pickBy(obj, _.identity);
false
ValuVous pouvez simplement enchaîner
_.omit()
avec_.isUndefined
et_.isNull
compositions, et obtenir le résultat avec l' évaluation paresseuse.Démo
Mise à jour du 14 mars 2016 :
Comme mentionné par les dylants dans la section des commentaires, vous devez utiliser la
_.omitBy()
fonction car elle utilise un prédicat au lieu d'une propriété. Vous devriez l'utiliser pour la version lodash4.0.0
et au-dessus.DEMO
Mise à jour du 1er juin 2016 :
Comme l'a commenté Max Truxa , lodash offrait déjà une alternative
_.isNil
, qui vérifie à la foisnull
etundefined
:la source
omitBy
fonction à la place deomit
. So_(my_object).omitBy(_.isUndefined).omitBy(_.isNull).value();
_.isNil
au lieu de chaîner_.isUndefined
et_.isNull
. Cela le rend encore plus court:var result = _.omitBy(my_object, _.isNil);
omitBy
est moins performant quepickBy
, donc ce dernier doit être préféré, et la condition de la fonction iteratee inversée. La réponse acceptée ci-dessus a raison.null
etundefined
valeurs. Leidentity
prédicat supprimera également desfalse
valeurs, donc si vous le basez simplement sur l'intention de la question, je ne vois pas de problème avec ma réponse. De plus, si nous parlons de «performances», ilomitBy
suffit d'appelerpickBy
avec unidentity
prédicat annulé , par défaut. Donc, en termes de performances, c'est trop petit pour être significatif.si vous utilisez lodash, vous pouvez utiliser
_.compact(array)
pour supprimer toutes les fausses valeurs d'un tableau.https://lodash.com/docs/4.17.4#compact
la source
_.pickBy(object, _.isNumber)
dans ce cas.La bonne réponse est:
Cela se traduit par:
L'alternative donnée ici par d'autres personnes:
Supprime également les
false
valeurs qui ne sont pas souhaitées ici.la source
{"a":1,"b":{"a":1,"b":null,"c":undefined}}
, propriété object.bb
, 'c' ne sera pas suppriméJuste:
Ce qui précède ne prend pas en compte les
null
valeurs, car elles sont absentes de l'exemple d'origine et mentionnées uniquement dans le sujet, mais je la laisse car elle est élégante et pourrait avoir ses utilisations.Voici l'exemple complet, moins concis, mais plus complet.
la source
_.omitBy
.Pour compléter les autres réponses, dans lodash 4 pour ignorer uniquement indéfini et nul (et pas des propriétés comme
false
), vous pouvez utiliser un prédicat dans_.pickBy
:_.pickBy(obj, v !== null && v !== undefined)
Exemple ci-dessous:
la source
0
,''
, lesfalse
valeurs. Vous pouvez également raccourcir le rappel env => v != null
.Selon les documents de lodash:
Vous pouvez également filtrer toutes les valeurs nulles
la source
Pour un objet imbriqué profond, vous pouvez utiliser mon extrait de code pour lodash> 4
la source
J'ai rencontré un problème similaire avec la suppression
undefined
d'un objet (profondément), et j'ai trouvé que si vous êtes d'accord pour convertir votre ancien objet ordinaire et utiliser JSON, une fonction d'aide rapide et sale ressemblerait à ceci:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description
"... Si indéfini, une fonction ou un symbole est rencontré lors de la conversion, il est soit omis (lorsqu'il est trouvé dans un objet), soit censuré à null (lorsqu'il est trouvé dans un tableau)."
la source
avec du JavaScript pur: (bien qu'Object.entries soit ES7, Object.assign est ES6; mais l'équivalent ES5 utilise uniquement Object.keys devrait également être faisable); notez également les
v != null
vérifications de null et d'indéfini;Edit: ceci ci-dessous est la version avec ES5 Object.keys uniquement: mais généralement avec ES7 dans Node v8 est plutôt agréable ;-)
Mise à jour d'octobre 2017 : avec Node v8 (depuis la v8.3 environ), il a maintenant une construction de propagation d'objets:
ou dans une seule réduction:
Mise à jour: quelqu'un veut récursif? n'est pas si difficile non plus, il suffit d'une vérification supplémentaire de isObject et de s'appeler récursivement:
ma conclusion: si Javascript pur peut le faire, j'éviterais toute dépendance de bibliothèque tierce:
la source
Étant donné que certains d'entre vous sont peut-être arrivés à la question en cherchant à supprimer spécifiquement uniquement
undefined
, vous pouvez utiliser:une combinaison de méthodes Lodash
le
rundef
package, qui supprime uniquement lesundefined
propriétésSi vous devez supprimer des propriétés de manière récursive
undefined
, lerundef
package a également unerecursive
option.Consultez la documentation pour plus de détails.
la source
Voici l'approche lodash que je prendrais:
La fonction pairs () transforme l'objet d'entrée en un tableau de tableaux clé / valeur. Vous faites cela pour qu'il soit plus facile d'utiliser rejeter () pour éliminer
undefined
etnull
valoriser. Après, vous vous retrouvez avec des paires qui n'ont pas été rejetées, et celles-ci sont entrées pour zipObject () , qui reconstruit votre objet pour vous.la source
En tenant compte du fait que
undefined == null
nous pouvons écrire comme suit:Exemple JSBin
la source
pickBy utilise l' identité par défaut:
la source
Chemin le plus court (lodash v4):
la source
Avec lodash (ou soulignement) vous pouvez faire
Sinon, avec JavaScript vanille, vous pouvez faire
Ne pas utiliser un test faux, car non seulement "undefined" ou "null" sera rejeté , il y a aussi d'autres valeurs fausses comme "false", "0", chaîne vide, {}. Ainsi, juste pour le rendre simple et compréhensible, j'ai choisi d'utiliser la comparaison explicite comme codé ci-dessus.
la source
Pour omettre toutes les valeurs falsey mais conserver les primitives booléennes, cette solution est utile.
la source
la source
J'utiliserais un trait de soulignement et m'occuperais également des chaînes vides:
jsbin .
la source
Pour les objets et les tableaux imbriqués en profondeur. et exclure les valeurs vides de la chaîne et de NaN
résultat:
la source
J'aime utiliser _.pickBy, car vous avez un contrôle total sur ce que vous supprimez:
Source: https://www.codegrepper.com/?search_term=lodash+remove+undefined+values+from+object
la source
Pour ceux d'entre vous qui cherchent à supprimer d'un tableau d'objets et qui utilisent lodash, vous pouvez faire quelque chose comme ceci:
Remarque: vous n'avez pas à détruire si vous ne le souhaitez pas.
la source