J'ai deux tableaux de ObjectCs maintenant, je veux les fusionner ensemble que le résultat final devrait ressembler à: p> Je ne vois pas comment je peux affecter les valeurs null. P> Je l'ai déjà essayé avec objet.Assign et avec l'opérateur "..." mais n'obtenez pas le résultat comme le souhait. < / p> De la même manière, je veux renommer l'identifiant sur une nouvelle clé en fonction de leur matrice. p> laisse résultat = a.concat (b) me donnerait un mauvais résultat p > p>
3 Réponses :
Vous pouvez utiliser le p>
contat () code> pour fusionner les tableaux ensemble, puis
Réduire () code> Pour supprimer les objets répétés par sa clé:
const admin = [
{
"categoryId": 66,
"categoryName": "category 66",
"id": 204
},
{
"categoryId": 149,
"teamName": "category 149",
"id": 178
}
]
const member = [
{
"categoryId": 66,
"teamName": "category 66",
"id": 271
},
{
"categoryId": 68,
"teamName": "category 68",
"id": 264
}
];
const client = [
{
"categoryId": 66,
"teamName": "category 66",
"id": 271
},
{
"categoryId": 155,
"teamName": "no team",
"id": 264
}
];
const merge = function(...params) {
let mergeResult = [];
params.map(elem => {mergeResult = mergeResult.concat(elem); });
return mergeResult;
}
const result = Object.values(merge(member, admin, client).reduce((acc,cur)=>Object.assign(acc,{[cur.categoryId]:cur}),{}));
console.log(result);
Merci beaucoup, mais avec ce résultat, je manque au Memberid et adminsid à partir des matrices d'origine.
@FESAR, en lisant votre réponse, je me rends compte que je dois à nouveau suivre la réduction de l'opération.
J'ai mis à jour ma réponse et vous pouvez désormais passer plusieurs tableaux à fusionner par la clé unique.
Vous pouvez utiliser un p>
définir code> pour obtenir uniquement les identifiants uniques, puis vous pouvez vous maquiller sur cela, trouver les données correspondantes et construire l'objet dans le format requis:
const admin = [{
"categoryId": 66,
"categoryName": "category 66",
"id": 204
},
{
"categoryId": 149,
"teamName": "category 149",
"id": 178
}
]
const member = [{
"categoryId": 66,
"teamName": "category 66",
"id": 271
},
{
"categoryId": 68,
"teamName": "category 68",
"id": 264
}
]
const findCategory = (categories, category) => categories
.find(x => x.categoryId === category) || null;
const mergeCategories = (adminIn, memberIn) => {
const mergedCategories = [
...adminIn,
...memberIn,
];
// we would like to know just the unique id's
const categoryIds = [...new Set(mergedCategories.map(x => x.categoryId))];
// we can map each unique id
return categoryIds.map(categoryId => {
// then we can find whether it has a matching category for each
const adminCategory = findCategory(admin, categoryId);
const memberCategory = findCategory(member, categoryId);
// now we can use that data to build the object in the required format
return {
categoryId,
categoryName: `category ${categoryId}`,
adminId: adminCategory === null ? adminCategory : adminCategory.id,
memberId: memberCategory === null ? memberCategory : memberCategory.id
}
});
}
const result = mergeCategories(
admin,
member,
)
console.dir(result)
p> foreach code> La boucle peut être utilisée et nous pouvons affecter des valeurs en conséquence
const admin = [
{
"categoryId": 66,
"categoryName": "category 66",
"id": 204
},
{
"categoryId": 149,
"teamName": "category 149",
"id": 178
}
]
const member = [
{
"categoryId": 66,
"teamName": "category 66",
"id": 271
},
{
"categoryId": 68,
"teamName": "category 68",
"id": 264
}
]
var arr=[];
var k=admin.forEach((e)=>{
var a=e.categoryId;
if(e.teamName)
{
e.categoryName=e.teamName;
delete e.teamName;
}
if(e.id)
e.adminid=e.id;
else
e.id=null
e.memberId=null;
delete e.id
var t=member.forEach((x)=>{
if(x.categoryId==a)
e.memberId=x.id;
})
arr.push(e);
})
console.log(arr)
Itérer plus de 2e matrice et utiliser objet.Assign pour fusionner des articles
Pouvez-vous ajouter ce que vous avez essayé?
Dupliqué possible de Comment fusionner deux tableaux en JavaScript et des éléments de duplication
Dupliqué possible de Modifier le nom de la propriété et JavaScript Fusion d'objets par ID