J'ai du mal à supprimer un objet dupliqué de mon tableau

Exemple:

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];

Dans cet exemple, j'ai 3 objets, et je veux supprimer l'objet qui a la place dupliquée

1
Marcos Vinicius de Souza Gouve 13 juil. 2015 à 19:13

6 réponses

Meilleure réponse

Comme vous l'avez ajouté:

je veux supprimer un seul, peu importe lequel

Si vous souhaitez supprimer les éléments en double et ne conserver que la première occurrence d'un lieu particulier , vous pouvez simplement utiliser une simple boucle pour recréer un nouveau tableau à partir de l'entrée:

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];

var uniqPlace = function(array){
    var result = [];
    array.forEach(function(el){
        if (result.filter(function(n){ return n.place === el.place }).length==0){
            result.push(el);
        }
    })
    return result;
}

Production:

uniqPlace(list);

[{"lieu": "AAA", "nom": "Moi"}, {"lieu": "BBB", "nom": "Vous"}]

0
TaoPR 13 juil. 2015 à 16:41

Juste au cas où quelqu'un se demanderait: underscore.js solution:

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];

_.uniq(list, function(item, key, a) { 
    return item.place;
})

Exemple de violon

1
SDekov 13 juil. 2015 à 16:50

Créez un object pour stocker les éléments selon leur valeur place, car le nouvel élément avec la même clé remplacera l'ancien, cela supprimera facilement tous les doublons.

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];
var removeDuplicate = function(list) {
  var keyStore = {};
  var output = [];
  // If you want to creata totally new one from old, use 
  // list = JSON.parse(JSON.stringify(list));
  // The above commented out code will create a copy of list, so the items in output will not affect the original ones.
  list.forEach(function(item) {
    // new one overwrites old one.
    keyStore[item.place] = item;
  });
  
  var key;
  for (key in keyStore) {
    output.push(keyStore[key]);
  }
  
  return output;
};

console.log(removeDuplicate(list));
0
fuyushimoya 13 juil. 2015 à 16:22

Essaye ça.

var result = {};
for (i = 0, n = arr.length; i < n; i++) {
    var item = arr[i];
    result[ item.place + " - " + item.name ] = item;
}

Bouclez à nouveau le résultat et recréez le tableau.

i = 0;    
for(var item in result) {
    clearnArr[i++] = result[item];
}
0
Stanimir Dimitrov 13 juil. 2015 à 16:21

3 façons de supprimer les objets en double du tableau

let list = [{place:"AAA",name:"Me"}, 
            {place:"BBB",name:"You"}, 
           {place:"AAA",name:"Him"}];



let output1 = Array.from(new Set(list.map(list=>list.place))).map(place=>{
  return {
   place: place,
   name: list.find(a=>a.place===place).name
  }
})
console.log('------------------------1st way')
console.log(output1)

let output2 = list.reduce((accumulator, element) => {
     if (!accumulator.find(el => el['place'] === element['place'])) {
          accumulator.push(element);
      }
     return accumulator;
   },[]);
console.log('------------------------2nd way')
console.log(output2)


const output3 = [];
const map = new Map();
for (const object of list) {
    if(!map.has(object.place)){
        map.set(object.place, true);
        output3.push({
            place: object.place,
            name: object.name
        });
    }
}
console.log('------------------------3rd way')
console.log(output3)
0
Vahid Akhtar 7 déc. 2019 à 07:50

Un simple:

var list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}, {place:"AAA",name:"Him"}];

list.forEach(function(i) {
  var duplicates = list.filter(function(j) {
    return j !== i && j.place == i.place;
  });
  duplicates.forEach(function(d) { list.splice(list.indexOf(d), 1); });
});

// list = [{place:"AAA",name:"Me"}, {place:"BBB",name:"You"}];
document.write(JSON.stringify(list));
1
Safeer Hussain 13 juil. 2015 à 17:05