profonde étendre (comme jQuery) pour nodeJS
Je suis aux prises avec de profondes copies d'objets en nodeJS. mon propre étendre l'est de la merde. trait de soulignement de l'étendre est plat. il y a plutôt simple d'étendre les variantes ici sur stackexchange, mais aucune n'est proche de jQuery.étendre(true, {}, obj obj obj) ..
(la plupart sont en réalité terrible et visser les avantages de asnyc code.)
donc, ma question: est-il une bonne copie en profondeur pour NodeJS? Personne n'a porté de jQuery ?
- Éviter de le faire. Profonde des copies sont mauvaises. Faveur superficielle des copies.
- pourriez-vous expliquer pourquoi? pour moi, le peu de copies sont un cauchemar lorsqu'ils se jettent dans une série de async rappels...
- aussi - notre structure DB (mongoDB) a assez profonde des objets et j'ai vraiment pas envie de déconner et de convertir des structures... c'est très commode de simplement travailler avec les mêmes objets dans le code & db ...
- Assurez-vous qu'il est. Il suffit de ne pas profondément les copier. Je travaille avec des objets de mongo et je n'ai jamais profond copier :\
- itsatony je suis en désaccord avec Raynos ici, vous devez utiliser votre jugement quant à savoir si ce comportement est bon pour votre cas d'utilisation. Juste être conscient qu'il ya des pièges et utiliser votre tête. C'est un débat sur la copie en profondeur/étendre problème pour le trait de Soulignement projet: github.com/documentcloud/underscore/issues/162
- Vous pouvez utiliser ce plugin github.com/maxmara/dextend
Vous devez vous connecter pour publier un commentaire.
Vous voulez de jQuery, il suffit donc de l'utiliser:
et un petit test pour montrer qu'elle n'profonde des copies
Mais n'oubliez pas de mentionner la source: https://github.com/jquery/jquery/blob/master/src/core.js
Il a déjà été porté. nœud-étendre
Note le projet n'a pas de tests et n'a pas beaucoup de popularité, donc à utiliser à vos propres risques.
Comme mentionné, vous n'aurez probablement pas besoin profond d'exemplaires. Essayez de changer vos structures de données si vous avez seulement besoin peu profondes des copies.
Quelques mois plus tard
J'ai écrit un petit module au lieu de cela, vous recommandons l'utilisation de xtend. Il ne s'agit pas d'une mise en œuvre contenant jQuery bagages ni de bugs, comme le node-mesure.
{ var options, name, ...
si l'appel récursif de travail et alors justemodule.exports = extend;
après que la fonction, sur la dernière ligne du fichier source (ligne 83).Un rapide et sale réponse à la profondeur des copies est juste de tricher avec un peu de JSON. C'est pas le plus performant, mais il fait le travail très bien.
it's only useful for copying simple objects of values; it fails for dates, functions, and in some instances constructed objects.
Veuillez utiliser le haut-util module:
util._extend
n'est pas profonde.Je sais que c'est une vieille question, mais je voudrais juste jeter lodash de la fusion dans le mélange comme une bonne solution. Je le recommande lodash pour les fonctions de l'utilitaire en général 🙂
extend
mutation de l'objet et ce suce le gros temps.merge
etextend
.var obj3 = lodash.extend(obj1, obj2)
va muterobj1
var obj3 = lodash.extend({}, obj1, obj2)
ne mutera pasobj1
.Cela fonctionne pour la profondeur de l'objet de l'extension... être averti qu'il remplace des tableaux plutôt que leurs valeurs, mais qui peut évidemment être mis à jour comme vous le souhaitez. Il doit maintenir l'énumération des capacités et toutes les autres choses que vous voudrez probablement qu'elle ne
Dans Node.js, Vous pouvez utiliser Extendify pour créer un _.étendre la fonction qui prend en charge les objets imbriqués extension (deep étendre) et est également immuable à la params (d'où profond clone).
nœud.étendre n'profonde et est familier jQuery syntaxe
il suffit d'installer l'extension.
docs:
nœud étendre paquet
installer:
ensuite en profiter:
profonde est facultatif. valeur par défaut est false. si l'interrupteur à true, de manière récursive fusionner vos objets.
Tranchant version appelée aiguiser.étendre.
Je ré-écrire nœud-étendre avec CoffeeScript et ajouter travis-ci de la suite de tests, parce que j'ai besoin profond d'adaptation dans Nœud pour moi, donc maintenant, c'est ici.
Et oui, je pense que dans certains cas il est absolument à utiliser correctement profond de fusion, par exemple je l'utilise au config fonctionne, quand on a besoin de fusionner par défaut et l'utilisateur branches ensemble.
Vous pouvez également utiliser ma version de prolonger plugin
https://github.com/maxmara/dextend