886 votes

Comment supprimer tous les doublons d'un tableau d'objets ?

J'ai un objet qui contient un tableau d'objets.

obj = {};

obj.arr = new Array();

obj.arr.push({place:"here",name:"stuff"});
obj.arr.push({place:"there",name:"morestuff"});
obj.arr.push({place:"there",name:"morestuff"});

Je me demande quelle est la meilleure méthode pour supprimer les objets en double d'un tableau. Par exemple, obj.arr deviendrait...

{place:"here",name:"stuff"},
{place:"there",name:"morestuff"}

0 votes

Voulez-vous dire comment empêcher qu'une table de hachage/un objet avec tous les mêmes paramètres soit ajouté à un tableau ?

9 votes

Mathew -> S'il est plus simple d'empêcher un objet en double d'être ajouté au tableau en premier lieu, au lieu de le filtrer plus tard, oui, ce serait bien aussi.

18 votes

Je suis toujours surpris de voir comment les gens nomment leurs variables. Parfois, je pense qu'ils veulent vraiment rendre les choses inutilement compliquées. La prochaine étape sera aaaaa.aaaa.push(...) :)

0voto

Yosvel Quintero Points 10172

Vous pouvez utiliser Objet.valeurs() combiné avec Array.prototype.reduce() :

const things = new Object();

things.thing = new Array();

things.thing.push({place:"here",name:"stuff"});
things.thing.push({place:"there",name:"morestuff"});
things.thing.push({place:"there",name:"morestuff"});

const result = Object.values(things.thing.reduce((a, c) => (a[`${c.place}${c.name}`] = c, a), {})); 

console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

0voto

sg28 Points 730

Faites quelque chose de simple. La fantaisie est une bonne chose, mais un code illisible est inutile. Bonne lecture :-)

var a = [
    {
        executiveId: 6873702,
        largePhotoCircle: null,
        name: "John A. Cuomo",
        photoURL: null,
        primaryCompany: "VSE CORP",
        primaryTitle: "Chief Executive Officer, President and Director"
    },
    {
        executiveId: 6873702,
        largePhotoCircle: null,
        name: "John A. Cuomo",
        photoURL: null,
        primaryCompany: "VSE CORP",
        primaryTitle: "Chief Executive Officer, President and Director"
    },
    {
        executiveId: 6873703,
        largePhotoCircle: null,
        name: "John A. Cuomo",
        photoURL: null,
        primaryCompany: "VSE CORP",
        primaryTitle: "Chief Executive Officer, President and Director",
    }
];

function filterDuplicate(myArr, prop) {
      // Format - (1)

      // return myArr.filter((obj, pos, arr) => {
      //     return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos;
      // });

      // Format - (2)
      var res = {};
      var resArr = [];
      for (var elem of myArr) {
        res[elem.executiveId] = elem;
      }
      for (let [index, elem] of Object.entries(res)) {
        resArr.push(elem);
      }
      return resArr;
  }

let finalRes = filterDuplicate(a,"executiveId");
console.log("finalResults : ",finalRes);

0voto

Sksaif Uddin Points 167

Vous pouvez également créer une fonction générique qui filtrera le tableau en fonction de la clé de l'objet que vous passez à la fonction.

function getUnique(arr, comp) {

  return arr
   .map(e => e[comp])
   .map((e, i, final) => final.indexOf(e) === i && i)  // store the keys of the unique objects
   .filter(e => arr[e]).map(e => arr[e]); // eliminate the dead keys & store unique objects

 }

et vous pouvez appeler la fonction comme ceci,

getUnique(things.thing,'name') // to filter on basis of name

getUnique(things.thing,'place') // to filter on basis of place

0voto

Simon Points 2263

Si vous voulez dé-dupliquer votre tableau en fonction de tous les arguments et pas seulement un. Vous pouvez utiliser la fonction uniqBy fonction de lodash qui peut prendre une fonction comme deuxième argument.

Vous aurez cette phrase :

 _.uniqBy(array, e => { return e.place && e.name })

0voto

Aman Singh Points 33
function dupData() {
  var arr = [{ comment: ["a", "a", "bbb", "xyz", "bbb"] }];
  let newData = [];
  comment.forEach(function (val, index) {
    if (comment.indexOf(val, index + 1) > -1) {
      if (newData.indexOf(val) === -1) { newData.push(val) }
    }
  })
}

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