-3
votes

ES6 fusionner deux matrices avec des objets et accumuler des données

J'ai deux tableaux de ObjectCs xxx

maintenant, je veux les fusionner ensemble que le résultat final devrait ressembler à: xxx

Je ne vois pas comment je peux affecter les valeurs null.

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.

laisse résultat = a.concat (b) me donnerait un mauvais résultat


4 commentaires

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


3 Réponses :


2
votes

Vous pouvez utiliser le contat () code> pour fusionner les tableaux ensemble, puis Réduire () code> Pour supprimer les objets répétés par sa clé:

p>

    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);


3 commentaires

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.



2
votes

Vous pouvez utiliser un 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:

p>

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)


0 commentaires

1
votes

foreach code> La boucle peut être utilisée et nous pouvons affecter des valeurs en conséquence

p>

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)


0 commentaires