Comment obtenir de l'union de plusieurs immutable.js Listes
Donc, j'ai une Liste:
let a = Immutable.List([1])
et de la Liste b:
let b = Immutable.List([2, 3])
Je veux avoir la Liste union === List([1, 2, 3])
d'eux.
J'essaie de fusion poing:
let union = a.merge(b); //List([2, 3])
Il semble que merge
méthode fonctionne avec des index, pas avec les valeurs de remplacements premier élément de List a
avec le premier élément de List b
. Donc, ma question est quelle est la façon la plus simple d'obtenir de l'union de plusieurs listes (idéalement sans itération sur eux, ainsi que d'autres opérations).
- Vous êtes à la recherche pour
a.concat(b)
? - dieu de barrage, ne pas le remarquer dans la doc ) Merci. vous pouvez le coller comme une réponse afin que je puisse l'accepter.
- Lmao, je n'ai pas vu concat.. essayé toutes sortes de choses.. merci 🙂
- Je pense que vous avez besoin de chercher à Définir le type de données.
InformationsquelleAutor Glen Swift | 2015-05-08
Vous devez vous connecter pour publier un commentaire.
Vous avez raison à propos de la fusion. Fusion sera mise à jour de l'indice par la valeur actuelle de la fusion de la liste. Donc dans votre cas vous avez eu
et l'a fusionné avec
qui finit par écraser
[0]=1
avec[0]=2
, puis définissez[1]=3
résultant dans votre observé[2,3]
groupe après la fusion.Une approche très simple de résoudre ce qui serait d'utiliser
concat
Et il va travailler pour cette situation. Cependant, si la situation est plus complexe, c'est peut-être incorrect. Par exemple,
ce serait vous donner deux 4 qui n'est pas techniquement une union plus. Malheureusement, il n'existe pas de syndicat inclus dans Immuable. Un moyen facile de mise en œuvre, il serait de définir chaque valeur de chaque liste comme la clef d'un objet, et puis prendre les clés, comme la résultante de l'union.
jsFiddle Démo
Ce processus est
O(2(n+m))
. Tout processus qui utilisecontains
ouindexOf
va finir par êtreO(n^2)
c'est pourquoi les clés ont été utilisés ici.la fin de modifier
Hyper-performant
toString()
méthode est mise en œuvre - mais alors, cela signifie que chaque fois que vous ajoutez de la valeur comme un objet clé, vous retrouvez l'appeltoString()
, d'où des performances.En fait Immutable.js a une union - c'est pour l'Ensemble de la structure de données:
https://facebook.github.io/immutable-js/docs/#/Set/union
La grande chose au sujet Immutable.js est-il permet d'introduire plus de constructions de programmation fonctionnelle en JS - dans ce cas, une interface commune et la capacité d'abstraction des types de données. Donc, pour faire un appel à l'union sur vos listes de les convertir, utilisez de l'union, puis de les convertir en arrière pour les listes:
concat
méthode.La mise en œuvre de
List#merge
a changé depuis que cette question a été posté, et dans la version actuelle4.0.0-rc-12
List#merge
fonctionne comme prévu et résout le problème.