La fusion des deux collections à l'aide Underscore.JS
À condition d'avoir deux collections:
c1 - [{a:1},{a:2},{a:3}]
et
c2 - [{a:1},{a:7},{a:8}]
quel est le moyen le plus rapide pour ajouter des objets uniques à partir de c2
en c1
à l'aide de Underscore.JS
? Les nombres réels dans les collections de 2K
pour c1
et 500
pour c2
, l'opération est effectuée souvent, et doit donc être performant!
Mise à jour de 1 - je suis seulement en utilisant Underscore.JS
pour quelques jours, je ne pouvais pas trouver un moyen d'ajouter une collection à l'autre (je peux filtre c2
moi-même) -, c'est que trivial dans Underscore.JS
?
- sont les éléments dans les deux tableaux triés en fonction de la valeur de
a
? - malheureusement non, mais je vois où vous venez de.
Vous devez vous connecter pour publier un commentaire.
Les suivantes:
Noter que cela ne peut fonctionner que si tous les objets ont la propriété
a
.Vous pouvez trouver d'autres options dans cette question.
Essayer:
En détail:
_.union(*arrays)
_.property(key)
(depuis la Version 1.6.0)_.uniq(array, [isSorted], [iteratee])
La documentation pour
uniq()
fonction mentionne qu'il fonctionne beaucoup plus rapidement si la liste est triée. Aussi à l'aide de l'enchaînement des appels peut améliorer la lisibilité. De sorte que vous pouvez faire:Ou si vous préférez le unchained version (qui est de 11 caractères plus court mais moins lisible):
La documentation et des exemples pour
uniq()
ne font pas clairement la façon dont la fonction de rappel fonctionne. L'algorithme deuniq()
les appels de la fonction cette fonction sur chaque élément à partir de deux listes. Si le résultat de cette fonction est la même, il supprime l'élément (en supposant qu'il est dupliqué).union()
en fait empêche les doublons lorsqu'elle est appelée sur un tableau. Nous pouvons utiliser ce fait trop:Ci-dessus comme convertit tout d'abord la liste des objets à de simples tableaux (
pluck()
), puis les combine en utilisantunion()
et finalement utilisemap()
de faire une liste d'objets.Référence: uniq()
Car il ya un grand nombre de propriétés à la fois des objets et cet algorithme s'exécute souvent, il serait préférable d'utiliser le langage Javascript de base à la place de n'importe quelle bibliothèque:
ici est un JSfiddle pour le tester.