2016-12-15 1 views
4

Lors de la déstructuration d'objets, je rencontre parfois le problème de ne pas savoir si des clés existent ou non, puis j'essaie d'en extraire des valeurs. Ce sont évidemment des erreurs, puisqu'elles ne sont pas définies. Par exemple:Déstructuration d'objets imbriqués

Attendons quelque chose comme ceci:

{ user: { name: { first: 'Trey', last: 'Hakanson' } } } 

Mais je reçois effectivement ceci:

{ user: {} } 

et tenter de déstructurer comme cette erreur:

const { user: { name: { first: firstName, last: lastName } } } = data 

est-il façon d'attribuer une valeur par défaut plus tôt dans la déconstruction? Telles que l'attribution name = { first: 'Hello', last: 'World' } si la clé name n'existe pas?

Répondre

6
const { user: { name: { first: firstName = 'firstName', last: lastName = 'lastName' } = {} } = {} } = data 
+0

Exactement ce que je cherchais, merci – treyhakanson

+0

Ce protège contre 'name' étant' undefined', mais toujours des erreurs si 'name' est' null pas vrai? Tout moyen de se protéger contre 'name' étant' undefined' ou 'null'? –

+0

Ne le pensez pas, null est en fait une valeur. Indéfini signifie simplement qu'il n'a pas été défini cette valeur – Mayday

-1

Vous pouvez affecter des valeurs par défaut si la valeur est une valeur falsifiée ou non définie dans votre cas. En javascript, les valeurs par défaut peuvent être assignées en utilisant l'opérateur ||.

Si le premier opérande est Falsy (false, null, undefined, "",0) alors il renvoie le deuxième opérande. Sinon, il renvoie le premier opérande. Cela fournit un moyen pratique de spécifier les valeurs par défaut

var myDefaultName = name || { first: 'Hello', last: 'World' } 
+0

Merci pour la réponse! Je suis actuellement en train d'utiliser cette solution, je cherchais une solution en utilisant seulement es6 deconstruction si – treyhakanson