J'ai un tableau d'objets, comme:
[{ actionType: 10, orderItemId: "3205ae52-ab00-4823-a004-da0cda639065", productComponentAction:{ productComponent:{ offerId: 10002839, parentOfferId: 10003058, adoptableProdCompId: undefined } } }, { actionType: 10, orderItemId: "3205ae52-ab00-4823-2121-da0cda6390ae", productComponentAction:{ productComponent:{ offerId: 10002839, parentOfferId: 10003058, adoptableProdCompId: undefined } } }]
Je veux que ce tableau soit unique sur la base de offerId
. Si offerId
est le même, alors je souhaite supprimer cet objet du tableau.
4 Réponses :
Vous pouvez simplement utiliser une carte, avec réduire, et récupérer les valeurs de la carte:
const arr = [{ actionType: 10, orderItemId: "3205ae52-ab00-4823-a004-da0cda639065", productComponentAction: { productComponent: { offerId: 10002839, parentOfferId: 10003058, adoptableProdCompId: undefined } } }, { actionType: 10, orderItemId: "3205ae52-ab00-4823-2121-da0cda6390ae", productComponentAction: { productComponent: { offerId: 10002839, parentOfferId: 10003058, adoptableProdCompId: undefined } } } ] const filtered = Array.from(arr.reduce((a, v) => { const id = v.productComponentAction.productComponent.offerId if(!a.has(id)) a.set(id, v) return a }, new Map()).values()) console.log(filtered)
Vous pouvez utiliser une carte temporaire, identifiée par ce que vous voulez être unique. Son constructeur accepte les paires [clé, valeur]:
let data = [{actionType: 10, orderItemId: "3205ae52-ab00-4823-a004-da0cda639065", productComponentAction:{productComponent:{ offerId: 10002839, parentOfferId: 10003058, adoptableProdCompId: undefined } }},{actionType: 10,orderItemId: "3205ae52-ab00-4823-2121-da0cda6390ae", productComponentAction:{ productComponent:{ offerId: 10002839, parentOfferId: 10003058, adoptableProdCompId: undefined } }}]; let uniques = Array.from(new Map( data.map(item => [item.productComponentAction.productComponent.offerId, item]) ).values()); console.log(uniques);
Vous pouvez créer un objet qui aurait objectId
comme clé, comme ceci:
var target = {}; for (let item of myArray) { if (target[item.objectId] === undefined) { target[item.objectId] = item; } }
et ensuite, lorsque vous essayez d'ajouter à ce tableau, vous vérifiez simplement si l'élément avec la clé spécifique existe déjà.
Il est possible d'utiliser la méthode réduire
. Il vérifie s'il existe une propriété avec la même clé et si elle existe, il crée une clé, sinon il ne fait rien:
let arr = [{ actionType: 10, orderItemId: "3205ae52-ab00-4823-a004-da0cda639065", productComponentAction:{ productComponent:{ offerId: 10002839, parentOfferId: 10003058, adoptableProdCompId: undefined } } }, { actionType: 10, orderItemId: "3205ae52-ab00-4823-2121-da0cda6390ae", productComponentAction:{ productComponent:{ offerId: 10002839, parentOfferId: 10003058, adoptableProdCompId: undefined } } }]; let filteredList = arr.reduce((a, c)=> { a[c.productComponentAction.productComponent.offerId] = a[c.productComponentAction.productComponent.offerId] || {...c}; return a; }, {}) console.log(Object.values(filteredList));
Un exemple:
arr.reduce((a, c)=> { a[c.productComponentAction.productComponent.offerId] = a[c.productComponentAction.productComponent.offerId] || {...c}; return a; }, {})