522 votes

Lodash - différence entre .extend () / .assign () et .merge ()

Dans la bibliothèque Lodash , quelqu'un peut-il fournir une meilleure explication de la fusion et de l' extension / assignation ?

C'est une question simple mais la réponse m'échappe néanmoins.

628voto

ShitalShah Points 2213

Voici comment etendre/affecter des travaux: Pour chaque propriété de la source, une copie de sa valeur en tant que-est à destination. si les valeurs de propriété sont eux-mêmes des objets, il n'est pas récursive de la traversée de leurs propriétés. Ensemble de l'objet seront prises à partir de la source et de l'ensemble de la destination.

Voici comment fusionner des travaux: Pour chaque propriété de la source, de vérifier si cette propriété est l'objet lui-même. Si c'est pour aller vers le bas de manière récursive et d'essayer de la carte enfant propriétés de l'objet à partir de la source à la destination. Donc, essentiellement, nous fondre l'objet de la hiérarchie de la source à la destination. Alors que pour étendre/céder, c'est simple une copie au niveau des propriétés de la source à la destination.

Voici simple JSBin qui permettrait de faire ce cristal clair: http://jsbin.com/uXaqIMa/2/edit?js console

Voici les plus élaborés, version qui inclut le tableau dans l'exemple ainsi: http://jsbin.com/uXaqIMa/1/edit?js console

84voto

samz Points 357

Une autre différence à prendre en compte est la gestion des valeurs undefined :

 mergeInto = { a: 1}
toMerge = {a : undefined, b:undefined}
lodash.extend({}, mergeInto, toMerge) = {a: undefined, b:undefined}
lodash.merge({}, mergeInto, toMerge) = {a: 1, b:undefined}
 

Donc merge ne fusionnera pas les valeurs undefined valeurs définies.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X