Je veux écrire du code, qui comporte à travers un tableau et supprime les doublons. Un duplicata devrait avoir les mêmes valeurs dans toutes les propriétés d'objet.
Mon tableau ressemble à ceci: p> maintenant je veux supprimer les étudiants qui ont les mêmes valeurs dans Nom et semestre.
Mais mon code génère simplement un tableau vide comme celui-ci: []
Quelque chose ne va pas avec mon état si affaibli? P>
4 Réponses :
Il est plus facile de créer un tableau sans duplicates que de supprimer les duplicats tout en bouchon de la matrice.
Réduisez la matrice à une carte, avec une clé conçue sur les valeurs de l'objet, la diffusion de la carte p> . () code> itérateur retour à un tableau: p> const data = [{"name":"Romeo Minnock","semester":12},{"name":"Romeo Minnock","semester":8},{"name":"Gideon Heinemann","semester":19},{"name":"Gideon Heinemann","semester":1},{"name":"Gideon Heinemann","semester":19},{"name":"Gideon Heinemann","semester":12},{"name":"Brant Colegrove","semester":3},{"name":"Brant Colegrove","semester":17},{"name":"Gideon Heinemann","semester":1},{"name":"Gideon Heinemann","semester":12}]
const result = [...
data.reduce((m, o) => {
const key = Object.values(o).join('--') // another option is JSON.stringify(o) if the object can have nested object values
return m.has(key) ? m : m.set(key, o)
}, new Map())
.values()]
console.log(result)
J'utiliserais une fonction de réduction pour cela:
const students = [
{ name: 'Romeo Minnock', semester: 12 },
{ name: 'Romeo Minnock', semester: 8 },
{ name: 'Gideon Heinemann', semester: 19 },
{ name: 'Gideon Heinemann', semester: 1 },
{ name: 'Gideon Heinemann', semester: 19 },
{ name: 'Gideon Heinemann', semester: 12 },
{ name: 'Brant Colegrove', semester: 3 },
{ name: 'Brant Colegrove', semester: 17 },
{ name: 'Gideon Heinemann', semester: 1 },
{ name: 'Gideon Heinemann', semester: 12 }
]
students.reduce((list, current) => {
// Check that the list does not contain this current value
// if not push it to the array
if (!list.find(s => s.name === current.name && s.semester === current.semester)) {
list.push(current);
}
return list;
}, []);
Voici une solution de travail basée sur ceci: https://stackoverflow.com/a/20339709/7919626
p>
var sameNameStudent = [{
name: 'Romeo Minnock',
semester: 12
},
{
name: 'Romeo Minnock',
semester: 8
},
{
name: 'Gideon Heinemann',
semester: 19
},
{
name: 'Gideon Heinemann',
semester: 1
},
{
name: 'Gideon Heinemann',
semester: 19
},
{
name: 'Gideon Heinemann',
semester: 12
},
{
name: 'Brant Colegrove',
semester: 3
},
{
name: 'Brant Colegrove',
semester: 17
},
{
name: 'Gideon Heinemann',
semester: 1
},
{
name: 'Gideon Heinemann',
semester: 12
}
];
function multiDimensionalUnique(arr) {
var uniques = [];
var itemsFound = {};
for(var i = 0, l = arr.length; i < l; i++) {
var stringified = JSON.stringify(arr[i]);
if(itemsFound[stringified]) { continue; }
uniques.push(arr[i]);
itemsFound[stringified] = true;
}
return uniques;
}
console.log(multiDimensionalUnique(sameNameStudent)); La raison pour laquelle votre algorithme ne fonctionne pas est parce que vous n'avez apparemment pas l'air assez prudent dans la façon dont épissure code> fonctionne. P>
Vous ne passez pas d'élément de tableau sur Puisque vous voulez apparemment enlever un seul élément - ce que vous seriez ce que vous feriez si vous deviez éliminer les doublures comme si vous essayez de faire avec votre algorithme - l'expression correcte dans votre cas doit être Votre prédicat de comparaison (les critères que vous utilisez pour déterminer l'égalité entre les éléments) peuvent également être insuffisants, même lorsque l'erreur avec épissure code>, comme vous l'avez fait - vous le transmettez au moins l'index du premier (le plus petit, de l'élément le plus plat) où l'enlèvement (et / ou l'ajout) Démarrera et, éventuellement, le nombre d'éléments à supprimer (ou supprimera tous les éléments à partir de l'index que vous passez comme premier argument). Tous les arguments ultérieurs sont ensuite pris pour être des éléments que vous souhaitez ajouter, à partir de l'endroit où les éléments retirés étaient. P>
Somenamestudent.splicite (L, 1) Code>. P>
épissure code> est corrigée - vous ne comparez que sur la valeur du semestre Code> Propriété - N'avez-vous pas impliqué que des éléments ne sont que dupliquer lorsque les deux em> nom et em> semestre sont égaux? Si tel est le cas, vous devez avoir samenamestudent [k] nom == samenamestudent [l] nom && samenamestudent [k] .semester == samenamestudent [l] .semester code> comme expression dans votre < code> si code> instruction. P>
Je suis curieux - même si l'élimination des éléments en double d'un tableau est une chose légitime à faire - d'où vient votre matrice qu'il contient des valeurs en double? Peut-être que votre requête de données n'était pas vraiment ce qu'elle aurait dû être?
Une autre solution à ce problème Stackoverflow .com / questions / 50729508 / ...