2 votes

Lodash uniqWith, how say lodash keep last duplicate

Bonjour, j'utilise la méthode lodash uniqWith pour supprimer les éléments dupliqués qui ont le même id dans mon tableau.

mais lodash garde le premier élément dupliqué. Mais je veux conserver le dernier élément dupliqué.

Que puis-je faire pour cela ?

var result = _.uniqWith(editedData, function(arrVal, othVal) {
      return arrVal.id === othVal.id;
    });
    console.log(result)

2voto

Jack Bashford Points 34617

Le moyen le plus simple ? Inverser d'abord le tableau (après l'avoir cloné pour éviter les mutations).

var result = _.uniqWith(_.reverse(_.clone(editedData)), function(arrVal, othVal) {...});

Vous pouvez également simplifier votre code :

var result = _.uniqWith(_.reverse(_.clone(editedData)), ({ id: a }, { id: b }) => a === b);

1voto

Ori Drori Points 65611

Vous pouvez créer une fonction uniqByLast à l'aide de la fonction _.flow() . Utiliser _.keyBy() pour obtenir un objet par id et _.values() pour obtenir un tableau :

const { flow, partialRight: pr, keyBy, values } = _

const lastUniqBy = iteratee => flow(
  pr(keyBy, iteratee),
  values
)

const arr = [{ id: 1, val: 1 }, { id: 1, val: 2 }, { id: 2, val: 1 }, { id: 2, val: 2 }]

const result = lastUniqBy('id')(arr)

console.log(result)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

Et la même idée en utilisant lodash/fp :

const { flow, keyBy, values } = _

const lastUniqBy = iteratee => flow(
  keyBy(iteratee),
  values
)

const arr = [{ id: 1, val: 1 }, { id: 1, val: 2 }, { id: 2, val: 1 }, { id: 2, val: 2 }]

const result = lastUniqBy('id')(arr)

console.log(result)

<script src='https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)'></script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X