2017-09-21 2 views
0

J'essaie d'intersecter 2 tableaux d'objets par un attribut en utilisant Lodash intersectWith.lodash - using intersectionWith pour obtenir l'intersection des tableaux d'objets résulte en un problème d'unicité

Par exemple:

var objects = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 

// Intersect by objects with the same value for 'x' 
_.intersectionWith(objects, others, (obj, oth) => obj.x === oth.x); 

Ce faisant, je reçois un résultat inattendu de seulement 1 objet:

[{ x: 1, y: 1 }] 

au lieu de l'ensemble du premier tableau:

[{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }] 

Pour une raison quelconque, la fonction intersectionWith ne renvoie apparemment que des résultats uniques en fonction de l'attribut par rapport.

Quelqu'un peut-il expliquer pourquoi cela se produit?

Répondre

0

Peut-être que vous manquez la part de _.intersection:

crée un tableau de valeurs uniques qui sont inclus dans tous les tableaux donnés à l'aide SameValueZero pour les comparaisons d'égalité. L'ordre et les références des valeurs de résultat sont déterminés par le premier tableau. [accent par NS]

Cela signifie que, si vous avez une valeur vérifiée de x: 1, alors plus d'objets avec cette valeur sont inclus dans le jeu de résultats.

+0

Salut, merci d'avoir répondu. J'ai remarqué cette section à la documentation. c'est juste que je pensais que le comportement attendu serait d'appliquer l'unicité sur l'ensemble de l'objet d'entrée, et non par le comparateur. – codeIt

1

documentation Lodash sur _.intersection:

Crée un tableau de valeurs uniques qui sont inclus dans tous les tableaux donnés à l'aide SameValueZero pour les comparaisons d'égalité.

documentation Lodash sur _.intersectionWith

Cette méthode est comme _.intersection sauf qu'il accepte comparateur qui est invoqué pour comparer des éléments de tableaux.

Cela signifie que votre comparateur détermine l'unicité des valeurs. En comparant seulement x vous faites tous les objets en fait la même selon votre comparateur personnalisé.