Home > Blockchain >  How can I calculate part in percentage for every user using loop for?
How can I calculate part in percentage for every user using loop for?

Time:03-04

I have two arrays here. One of projects and other for lead. Every project have idLead like foreign key. I already created some functions and they are working fine. I want now just to loop on lead to know the part of every lead in projects. I mean how many projects has every lead in %?

  ngOnInit(): void {
    // This is intentional

    this.SumOfLead();
    this.SumOfProjet();
    this.ProjetParAnnee('2020');
    this.leadParAnnee();
    this.LeadProjetSum('2');
  }
  leadList: any = [
    { id: '1', libelle: 'Vector', anneeCreation: '2020' },
    { id: '2', libelle: 'Salim', anneeCreation: '2021' },
    { id: '3', libelle: 'Antoine', anneeCreation: '2020' },
    { id: '4', libelle: 'Eya', anneeCreation: '2022' },
    { id: '5', libelle: 'Juliette', anneeCreation: '2021' },
    { id: '6', libelle: 'Anna', anneeCreation: '2021' },
  ];

  projetList: any = [
    {
      id: '1',
      libelle: 'EcoleVector',
      anneeCreation: '2021',
      idLead: '1',
    },
    { id: '2', libelle: 'Aramex', anneeCreation: '2021', idLead: '2' },
    { id: '3', libelle: 'SpeedFood', anneeCreation: '2021', idLead: '4' },
    { id: '4', libelle: 'Jumia', anneeCreation: '2022', idLead: '1' },
    { id: '5', libelle: 'Amazon', anneeCreation: '2020', idLead: '5' },
    { id: '6', libelle: 'AliBaba', anneeCreation: '2022', idLead: '6' },
    { id: '7', libelle: 'TikTok', anneeCreation: '2021', idLead: '3' },
    { id: '8', libelle: 'Teskerti', anneeCreation: '2022', idLead: '2' },
  ];
  SumOfLead() {
    let nombreLead = this.leadList.length;
    console.log(nombreLead, 'nombre de leads');
  }

  SumOfProjet() {
    let nombreProjet = this.projetList.length;
    console.log(nombreProjet, 'nombre de projets');
  }

  ProjetParAnnee(annee: string) {
    let filteredProjet = this.projetList.filter(
      (list: any) => list.anneeCreation === annee
    );
    console.log(filteredProjet, 'projets  crées en 2020');
  }

  leadParAnnee() {
    let annee = '2021';
    let filteredLead = this.leadList.filter(
      (lead: any) => lead.anneeCreation === annee
    );
    console.log(filteredLead, ' nombre de  lead crées  en  2021');
  }

  LeadProjetSum(id: any) {
    let nombreProjet = this.projetList.length;
    let SumProjetForOneLead = this.projetList.filter((sum: any) => sum.idLead === id);
    let part = (SumProjetForOneLead.length * 100) / nombreProjet;
    

    console.log(
      SumProjetForOneLead.length,
      'nombre de projet  par lead ',
      'part=',
      part   '%'
    );
  }

CodePudding user response:

Better than create a function and use in .html, add a new property to LeadList:

const count=this.projetList.length;
this.leadList.forEach(x=>{
   x.part=this.projetList.filter(y=>y.idLead==x.id).length/count*100.0
})

or you can create a countProjects array

const countProject=this.projetList.reduce((a,b)=>{
 const el=a.find(x=>x.id==b.idLead);
 if (!el)
   a.push({id:b.idLead,count:1})
  else
   el.count  

 return a
},[])

//and use
 this.leadList.forEach(x=>{
    const counter=countProject.find(y=>y.id==x.id)
    x.part=counter?counter.count/count*100.0:0
 })

CodePudding user response:

thanks every one i did it , it's just an easy loop

leadProjetSum() {
   const nombreProjet = this.projetList.length;

   for (let lead of this.leadList) {
     let SumProjetByLead = this.projetList.filter(
       (project: any) => project.idLead === lead.id
     );

     const partlead = (SumProjetByLead.length * 100) / nombreProjet;

     console.log(
       lead.libelle,
       ':nombre de projets =',
       SumProjetByLead.length,
       ':part est =',
       partlead   '%'
     );
   }
 }

  • Related