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;
}, {})