2 votes

Comparer 2 objets et mettre à jour l'objet correspondant en javascript

Je souhaite comparer 2 tableaux d'objets et mettre à jour l'objet correspondant ainsi que le nombre total dans l'objet.

let arr1 = [{status: 'Total', count: 0, text: 'Total applications'},
{status: 'submitted', count: 0, text: 'Applications submitted'},
{status: 'Rejected', count: 0, text: 'Applications rejected'}]

let arr2 = [
   {status: "submitted", count: 20} ,
{status: "Rejected", count: 10}
]

fonction

 let finalResult = arr2.map(function(a){
       var result=arr1.filter(b=> a.status==b.status ?  {...a, count:b.count} : arr1[0].count:arr1[0].count  );
       return result

   })

Le résultat final devrait être le suivant :

 [{status: 'Total', count: 30, text: 'Total applications'},
{status: 'submitted', count: 20, text: 'Applications submitted'},
{status: 'Rejected', count:10, text: 'Applications rejected'}
]

1voto

Code Maniac Points 29570

Vous pouvez simplement faire une boucle sur le deuxième tableau et construire une carte de hachage ainsi que trouver la valeur totale. Il suffit maintenant de faire une boucle sur le premier tableau et de mettre à jour les valeurs en conséquence

let arr1 = [{status: 'Total', count: 0, text: 'Total applications'},{status: 'submitted', count: 0, text: 'Applications submitted'},{status: 'Rejected', count: 0, text: 'Applications rejected'}]

let arr2 = [{status: "submitted", count: 20} ,{status: "Rejected", count: 10}]

let total = 0;
let obj = {}

// finding total and build hash map
arr2.forEach(data => {
  obj[data.status] = obj[data.status] || data
  total += data.count
})

// loop over first array and update count accordingly
let final = arr1.map(data => {
  if(data.status === 'Total'){
    return {...data, count: total}
  } else if(data.status in obj){
    return {...data, ...obj[data.status]}
  } else {
    return data
  }
})

console.log(final)

1voto

Andy Points 8361

Recherchez d'abord l'objet avec l'attribut Total statut. Il faut ensuite parcourir en boucle le deuxième tableau d'objets, trouver l'indice de chaque objet dans le premier tableau, mettre à jour le compte de l'objet et enfin mettre à jour le compte total.

let arr1=[{status:"Total",count:0,text:"Total applications"},{status:"submitted",count:0,text:"Applications submitted"},{status:"Rejected",count:0,text:"Applications rejected"}],arr2=[{status:"submitted",count:20},{status:"Rejected",count:10}];

let total = arr1.find(obj => obj.status === 'Total');

for (const obj of arr2) {

  const { count } = obj;

  const index = arr1.findIndex(o => {
    return o.status === obj.status
  });

  arr1[index].count = count;

  total.count += count;

}

console.log(arr1)

Documentation complémentaire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X