trait de soulignement/lodash unique par de multiples propriétés

J'ai un tableau d'objets avec des doublons et je vais essayer d'obtenir un unique d'inscription, où l'unicité est définie par un sous-ensemble des propriétés de l'objet. Par exemple,

{a:"1",b:"1",c:"2"}

Et je veux ignorer c dans l'unicité de comparaison.

Je peux faire quelque chose comme

_.uniq(myArray,function(element) { return element.a + "_" + element+b});

J'espérais que je pourrais faire

_.uniq(myArray,function(element) { return {a:element.a, b:element.b} });

Mais qui ne fonctionne pas. Est-il quelque chose comme ce que je peux faire, ou dois-je créer, comparable à une représentation de l'objet, si je suis la comparaison de plusieurs propriétés?

  • Et pourquoi essayez-vous de faire la deuxième tentative? La première est de travail, droit?
  • Oui, le premier est un travail, mais il se sent un peu hacky avoir à faire la concaténation de chaîne. En essayant de comprendre si il ya un moyen plus naturel pour ce faire.
  • les objets sont toujours uniques, de sorte que vous besoin de comparer par la propriété individuelle des valeurs, non pas par l'ensemble des objets. à l'aide d'une comparaison de chaîne peut fonctionner avec certaines données, mais pas d'autres, par exemple: avec des chaînes numériques comme indiqué, le risque de collision {a:"1"} avec {a:1}.s
  • _.uniq([{un:"1",b:"1",c:"2"},{a:"1",b:"2",c:"2"},{a:"1",b:"1",c:"2"}], JSON.stringify); JSON ordre n'est pas garanti, mais je ne vois pas pourquoi ce ne serait pas au sein d'un seul navigateur.
  • Dans mon cas particulier, je ne fais que de la comparaison de chaînes. @dandavis je ne veux pas de comparer tous les attributs, seul un sous-ensemble d'entre eux
  • Je pense qu'il serait mieux pour emballer les propriétés dans des tableaux avant de JSONifying eux. Ou écrire votre propre version de _.uniq qui utilise _.isEqual au lieu de ===.
  • vous souhaitez utiliser _unique strictement, ou vous voulez faire une plus fonctionnelles de la solution? comme la création d'un comparateur de fonction et de combiner reduce/find ou combile filter/find?

InformationsquelleAutor Jeff Storey | 2014-10-10