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(...) :)

-1voto

ARUN ARUMUGAM Points 43
function filterDuplicateQueries(queries){
    let uniqueQueries = [];
     queries.forEach((l, i)=>{
        let alreadyExist = false;
        if(uniqueQueries.length>0){
            uniqueQueries.forEach((k, j)=>{
                if(k.query == l.query){
                    alreadyExist = true;
                }
            });
        }
        if(!alreadyExist){
           uniqueQueries.push(l)
        }
    });

-1voto

Shijo Rs Points 27
var 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"});
console.log(things);
function removeDuplicate(result, id) {
    let duplicate = {};
    return result.filter(ele => !duplicate[ele[id]] &&                   (duplicate[ele[id]] = true));
}
let resolverarray = removeDuplicate(things.thing,'place')
console.log(resolverarray);

-3voto

HARISH TIWARY Points 25

Voici une solution utilisant la nouvelle fonction de filtre de JavaScript qui est assez facile. Disons que vous avez un tableau comme celui-ci.

var duplicatesArray = ['AKASH','AKASH','NAVIN','HARISH','NAVIN','HARISH','AKASH','MANJULIKA','AKASH','TAPASWENI','MANJULIKA','HARISH','TAPASWENI','AKASH','MANISH','HARISH','TAPASWENI','MANJULIKA','MANISH'];

La fonction de filtre vous permettra de créer un nouveau tableau, en utilisant une fonction de rappel une fois pour chaque élément du tableau. Vous pouvez donc configurer le tableau unique de la manière suivante.

var uniqueArray = duplicatesArray.filter(function(elem, pos) {return duplicatesArray.indexOf(elem) == pos;});

Dans ce scénario, votre tableau unique va parcourir toutes les valeurs du tableau dupliqué. La variable elem représente la valeur de l'élément dans le tableau (mike,james,james,alex), la position est sa position indexée sur 0 dans le tableau (0,1,2,3...), et la valeur duplicatesArray.indexOf(elem) est juste l'index de la première occurrence de cet élément dans le tableau original. Ainsi, comme l'élément 'james' est dupliqué, lorsque nous parcourons en boucle tous les éléments de duplicatesArray et que nous les poussons vers uniqueArray, la première fois que nous rencontrons james, notre valeur "pos" est 1, et notre indexOf(elem) est également 1, donc James est poussé vers uniqueArray. La deuxième fois que nous touchons James, notre valeur "pos" est 2, et notre indexOf(elem) est toujours 1 (parce qu'il ne trouve que la première instance d'un élément du tableau), donc le double n'est pas poussé. Par conséquent, notre uniqueArray ne contient que des valeurs uniques.

Voici la démo de la fonction ci-dessus. Cliquez ici pour l'exemple de fonction ci-dessus

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