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 '%'
);
}
}