removeDuplicates () prend un tableau d'objets et retourne un nouveau tableau sans aucun objet en double (basé sur la propriété id).
const allTests = [
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'},
{name: 'Test2', id: '2'},
{name: 'Test3', id: '3'}
];
function removeDuplicates(array) {
let uniq = {};
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true))
}
removeDuplicates(allTests);
Résultat attendu:
[
{name: 'Test1', id: '1'},
{name: 'Test3', id: '3'},
{name: 'Test2', id: '2'}
];
Tout d'abord, nous définissons la valeur de la variable uniq sur un objet vide.
Ensuite, nous filtrons à travers le tableau d'objets. Le filtre crée un nouveau tableau avec tous les éléments qui réussissent le test implémenté par la fonction fournie.
return array.filter(obj => !uniq[obj.id] && (uniq[obj.id] = true));
Ci-dessus, nous utilisons la fonctionnalité de court-circuitage de &&. Si le côté gauche du && prend la valeur true, il renvoie la valeur à droite du &&. Si le côté gauche est faux, il renvoie ce qui se trouve sur le côté gauche du &&.
Pour chaque objet (obj), nous vérifions uniq pour une propriété nommée la valeur de obj.id (dans ce cas, à la première itération, il vérifierait la propriété «1».) Nous voulons le contraire de ce qu'il retourne (soit vrai ou faux) c'est pourquoi nous utilisons le! dans! uniq [obj.id]. Si uniq a déjà la propriété id, elle renvoie true qui est évaluée à false (!) En disant à la fonction de filtre de ne PAS ajouter cet obj. Cependant, s'il ne trouve pas la propriété obj.id, il renvoie false qui est ensuite évalué à true (!) Et renvoie tout à droite du &&, ou (uniq [obj.id] = true). Il s'agit d'une valeur véridique, indiquant à la méthode de filtrage d'ajouter cet obj au tableau renvoyé, et elle ajoute également la propriété {1: true} à uniq. Cela garantit qu'aucune autre instance obj avec le même identifiant ne sera ajoutée à nouveau.