J'ai un tableau d'objets.
const arr = [{ title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 }, { title: "sky", artist: "Jon", id: 1 } ]; const uniqueScenarios = Array.from(new Set(arr.map(a => a.id))) .map(id => { return arr.find(a => a.id === id) }) console.log(uniqueScenarios) const arr1 = [{ title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 }, { title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 } ]; const uniqueScenarios1 = Array.from(new Set(arr1.map(a => a.id))) .map(id => { return arr1.find(a => a.id === id) }) console.log(uniqueScenarios1)
8 Réponses :
C'est une doublure:
const arr = [{ title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 }, { title: "sky", artist: "Jon", id: 1 } ]; const arr1 = [{ title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 }, { title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 } ]; function removeDupes(list) { return list.filter(el => list.filter(e => e.id == el.id).length == 1); } console.log(removeDupes(arr)); console.log(removeDupes(arr1));
Pourriez-vous m'aider ici aussi? Stackblitz.com/edit/react-ts-a9pgna?file=validatefile. TSX Je suis capable d'ajouter des articles mais incapables de les supprimer
Un moyen de le faire, afin d'éviter d'exécuter une boucle exponentielle consiste à enregistrer toutes les valeurs à un nouvel objet et à convertir cet objet à un nouveau tableau.
const combinedObj = arr.reduce((obj, item) => { obj[item.id] = item; return obj; }, {}); const newArray = Object.values(combinedObj)
Ce n'est pas ce qu'OP demande. Ils veulent supprimer tous les objets d'un ID code> si un
ID code> apparaît plus d'une fois.
exactement. Vous continuerez à l'ajouter à un objet réducteur par un nom de clé: donc réducteur [1] = {id: 1}, écraser la valeur précédente à chaque fois et finissez avec un objet contenant la liste des valeurs uniques;
Vous pouvez le faire dans une ligne comme ceci: ou vous pouvez le faire comme ceci (mieux en termes de complexité de temps): P> const arr = [
{ title: "sky", artist: "Jon", id: 1 },
{ title: "rain", artist: "Paul", id: 2 },
{ title: "sky", artist: "Jon", id: 1 },
];
const counts = arr.reduce((counts, curr) => (counts[curr.id] = ++counts[curr.id] || 1, counts), {})
const res = arr.filter(curr => counts[curr.id] === 1)
Vous pouvez exécuter le tableau via Réduire () puis utilisez pour voir si vous devez ajouter si cela n'existe pas, ou supprimez à l'aide de Filtre si cela le fait.
Snippet: P>
p>
const arr = [ { title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 }, { title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 }, { title: "earth", artist: "Frank", id: 3 }, ]; const unique = arr.reduce((accumulator, currentValue) => { // add if we don't have if (!accumulator.some(x => x.id === currentValue.id)) { accumulator.push(currentValue); } else { // remove if we do accumulator = accumulator.filter(x => x.id !== currentValue.id); } return accumulator; }, []); console.info(unique);
Vous pouvez trier les données par ID, puis chaque élément qui a un identifiant code> différent code> comparé à l'élément suivant et que l'élément de prev doit être ajouté à la matrice de résultat.
0: {title: "test", artist: "test", id: 3}
Vous pouvez prendre un objet et filtrer avec la valeur de la table de hachage.
p>
const array = [{ title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 }, { title: "sky", artist: "Jon", id: 1 }, { title: "rain", artist: "Paul", id: 2 }], ids = array.reduce((r, { id }) => (r[id] = !(id in r), r), {}), result = array.filter(({ id }) => ids[id]); console.log(result);
Merci @nina. Ça a marché. Pouvez-vous m'aider à comprendre cela? Stackblitz.com/edit/react-ts-a9pgna?file=validatefile. TSX Je suis capable d'ajouter des éléments mais incapables de les supprimer sur la liste.
@ A2441918, je n'ai aucune idée. S'il vous plaît poser une nouvelle question.
Stackoverflow.com/Questions/62417142/...
Vous pouvez regrouper les éléments par p> ID code>, puis utiliser
_. platmap () code> pour convertir un seul tableau. Dans le
_. Platmap () code> Rappel renvoie un tableau vide si le groupe a plus d'un élément:
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
Si vous connaissez le titre p> code>,
artiste code>,
ID code> va être dans le même ordre dans chacun de l'objet, une solution peut être Ceci:
var arrayX=[
{ title: "sky", artist: "Jon", id: 1 },
{ title: "rain", artist: "Paul", id: 2 },
{ title: "sky", artist: "Jon", id: 1 }
];
var newArray = arrayX.map(i=> JSON.stringify(i)); //stringify all the objects so as to compare them
var res = newArray.filter((elem, index)=>{
if(newArray.indexOf(elem) === newArray.lastIndexOf(elem)){
return elem //get only those elements whihc do not have dupes
}
});
var finalResult = res.map(i=>JSON.parse(i)); //parse the result to get the array of object
console.log(finalResult)
@Ninascholz désolé. Mise à jour de l'OP
Est-ce que cela répond à votre question? Stackoverflow.com/questions/9229645/... < / a>
Avez-vous seulement des duplicats avec deux mêmes
id code>?
Obtenez un objet avec chaque
ID code> comme clé et
comptez code> pour ces touches en tant que valeur.
Filtre Code> Tous les éléments avec
Nombre = 1 code>.
@Ninascholz Ouais. Je pousse essentiellement un objet dans un tableau et je supprime les doublons
N'oubliez pas d'accepter une réponse si cela résout votre problème