使用* ngfor计算Angular 2和ionic 2中数组元素的总和

时间:2017-05-21 00:40:15

标签: angular typescript ionic-framework

我开发了一个带离子2的移动应用程序,我需要每个couse(马)来计算每年的分配总和(Course.allocation),

Par例子: 表:课程(种族):

[Id_course:1,分配:200,日期:10/03/2012,idcheval:1]

[Id_course:2,分配:300,日期:11/07/2012,idcheval:1]

[Id_course:3,分配:700,日期:10/03/2013,idcheval:1]

[Id_course:4,分配:600,日期:10/03/2013,idcheval:1]

参与表:

[2012,2013]

所以显示如下:

2012 ====> 500

2013 ====> 1300

你能帮我吗?

JSON

{
course_cheval: [
{
CourseHasCheval: {
id: "1294",
course_id: "408",
cheval_id: "182",
rang: "2",
temps: "5 L",
jockey_id: "23",
poids: "54",
part_jokey: "147.000",
entraineur_id: "6",
part_entraineur: "165.000",
propritaire: "TORGEMAN. F",
part_propritaire: "1650.000",
eleveur_id: "20",
part_eleveur: "825.000"
},
Course: {
id: "408",
date: "2013-12-22",
nom_du_prix: "ROUBAYIAT",
allocation: "7500",
hippodrome_id: "2",
jouree: "72",
categorie_id: "3",
distance: "1600",
nbre_partant: "8",
detail: " 5ème Course PRIX ROUBAYIAT (GR.3) Le 22 Déc 2013. Pouliches de 3 ans Pur Sang Arabe. 7.500 Dinars (4.125 - 1650 - 825 - 525 - 375) Primes (2.062.5 - 825 - 412.5 - 262,5) Entrée : 41 d,250 - Forfaits : 13 d,750 & 27 d,500 Pour pouliches de 3 ans de Pur Sang Arabe Poids 54 kg - Surcharge : 1 kg par course de G3 - 3 kg par course de G2, 5 kg par course de G1 - Surcharges cumulables. Distance : 1600 mètres environ. ",
video: "",
international: false,
etranger: "0"
},
Cheval: {
id: "182",
nom: "DAYJURA",
sexe: "2",
robe_id: "4",
ne: "2010",
race_id: "1",
code: "7957",
nom_p: "KERBELLA",
ne_p: "1992",
nom_m: "ISTIHBAB",
ne_m: "1996",
nom_pm: "CHEIKH EL ARAB",
ne_pm: "1990",
etat: "1",
eleveur_id: "20",
propritaire: "TORGEMAN. F",
photo: "",
export: "2000",
pays: "",
mise_service: null,
production: "0000"
},
},
{
CourseHasCheval: {
id: "583",
course_id: "187",
cheval_id: "182",
rang: "5",
temps: "5 L",
jockey_id: "23",
poids: "54",
part_jokey: "45.000",
entraineur_id: "6",
part_entraineur: "38.000",
propritaire: "TORGEMAN. F",
part_propritaire: "375.000",
eleveur_id: "20",
part_eleveur: "0.000"
},
Course: {
id: "187",
date: "2014-02-02",
nom_du_prix: "IKMEL",
allocation: "7500",
hippodrome_id: "2",
jouree: "6",
categorie_id: "3",
distance: "1600",
nbre_partant: "7",
detail: " 5ème Course PRIX IKMEL (GR.3) Le 02 Février 2014. Pouliches de 4 ans Pur Sang Arabe. 7.500 Dinars (4.125 - 1650 - 825 - 525 - 375) Primes (2.062.5 - 825 - 412.5 - 262,5) Entrée : 41 d,250 - Forfaits : 13 d,750 & 27 d,500 Pour pouliches de 4 ans de Pur Sang Arabe - Poids 54 kg - Surcharge : 1 kg par course de G3, 3 kg par course de G2 - 5 kg par course de G1 - Surcharges cumulables. Distance : 1600 mètres environ. ",
video: "",
international: false,
etranger: "0"
},
Cheval: {
id: "182",
nom: "DAYJURA",
sexe: "2",
robe_id: "4",
ne: "2010",
race_id: "1",
code: "7957",
nom_p: "KERBELLA",
ne_p: "1992",
nom_m: "ISTIHBAB",
ne_m: "1996",
nom_pm: "CHEIKH EL ARAB",
ne_pm: "1990",
etat: "1",
eleveur_id: "20",
propritaire: "TORGEMAN. F",
photo: "",
export: "2000",
pays: "",
mise_service: null,
production: "0000"
},
},
{
CourseHasCheval: {
id: "661",
course_id: "210",
cheval_id: "182",
rang: "1",
temps: "1.39''9/10",
jockey_id: "27",
poids: "55",
part_jokey: "330.000",
entraineur_id: "6",
part_entraineur: "330.000",
propritaire: "TORGEMAN. F",
part_propritaire: "3300.000",
eleveur_id: "20",
part_eleveur: "1650.000"
},
Course: {
id: "210",
date: "2014-03-09",
nom_du_prix: "OUID’AA",
allocation: "6000",
hippodrome_id: "2",
jouree: "15",
categorie_id: "4",
distance: "1400",
nbre_partant: "7",
detail: " 1ère Course PRIX OUID’AA (L.R) Le 09 Mars 2014. Pouliches & juments de 4 ans et plus Pur Sang Arabe. 6.000 Dinars (3.300 - 1.320 - 660 - 420 - 300) Primes (1.650 - 660 - 330 - 210) Entrée : 33 d,00 - Forfaits : 11 d,00 & 22 d,00 Pour pouliches et juments de 4 ans et plus de Pur Sang Arabe n’ayant pas gagné une course de G1 ou de G2 depuis le 01/01/2014 ni 10.500 DT depuis le 01/05/2014 - Poids 54 kg - Surcharge 1 kg par 2.000 DT, Décharge 2 kg pour celles n’ayant jamais gagné une course de groupe. Distance : 1400 mètres environ.",
video: "",
international: false,
etranger: "0"
},
Cheval: {
id: "182",
nom: "DAYJURA",
sexe: "2",
robe_id: "4",
ne: "2010",
race_id: "1",
code: "7957",
nom_p: "KERBELLA",
ne_p: "1992",
nom_m: "ISTIHBAB",
ne_m: "1996",
nom_pm: "CHEIKH EL ARAB",
ne_pm: "1990",
etat: "1",
eleveur_id: "20",
propritaire: "TORGEMAN. F",
photo: "",
export: "2000",
pays: "",
mise_service: null,
production: "0000"
},

},
{
CourseHasCheval: {
id: "687",
course_id: "219",
cheval_id: "182",
rang: "4",
temps: "3 L 1/2",
jockey_id: "27",
poids: "54",
part_jokey: "57.000",
entraineur_id: "6",
part_entraineur: "53.000",
propritaire: "TORGEMAN. F",
part_propritaire: "525.000",
eleveur_id: "20",
part_eleveur: "263.000"
},
Course: {
id: "219",
date: "2014-03-30",
nom_du_prix: "MEZIANA",
allocation: "7500",
hippodrome_id: "2",
jouree: "19",
categorie_id: "3",
distance: "1600",
nbre_partant: "5",
detail: " 2ème Course PRIX MEZIANA (GR.3) Le 30 Mars 2014. Pouliches de 4 ans Pur Sang Arabe. 7.500 Dinars (4.125 - 1650 - 825 - 525 - 375) Primes (2.062.5 - 825 - 412.5 - 262,5) Entrée : 41d, 250 – Forfaits : 13d, 750 & 27d, 500 Pour pouliches de 4 ans de Pur Sang Arabe - Poids 54 kg - Surcharge : 1 kg par course de G3, 3 kg par course de G2 - 5 kg par course de G1 - Surcharges cumulables. Distance : 1600 mètres environ.",
video: "",
international: false,
etranger: "0"
},
Cheval: {
id: "182",
nom: "DAYJURA",
sexe: "2",
robe_id: "4",
ne: "2010",
race_id: "1",
code: "7957",
nom_p: "KERBELLA",
ne_p: "1992",
nom_m: "ISTIHBAB",
ne_m: "1996",
nom_pm: "CHEIKH EL ARAB",
ne_pm: "1990",
etat: "1",
eleveur_id: "20",
propritaire: "TORGEMAN. F",
photo: "",
export: "2000",
pays: "",
mise_service: null,
production: "0000"
},

,

},
],
engagements: [
[
{
annee: "2014"
}
],
[
{
annee: "2013"
}
]
]
}

模板

<ion-row *ngFor="let ch of cheval1 ">
      {{ch[0].annee }}
    <div *ngFor="let m of members  ; let rowIndex = index">
            <ion-col *ngIf="ch[0].annee == (m.Course.date |date : 'yyyy' )">
            {{ m.Course.allocation}} 
            </ion-col>
     </div>

组件

allocationSum: number;
// other variables

getIdCheval() {

  this.allocationSum = this.members.reduce((previous, current) => {
    return previous + parseInt(current.Course.allocation);
  }, 0);
}

1 个答案:

答案 0 :(得分:1)

映射并缩小:

const table = [{ 
    Id_course: 1, 
    allocation: 200, 
    date: '10/03/2012', 
    idcheval: 1 },
    { 
    Id_course: 1, 
    allocation: 200, 
    date: '10/03/2012', 
    idcheval: 1 },{ 
    Id_course: 1, 
    allocation: 200, 
    date: '10/03/2014', 
    idcheval: 1 },
    { 
    Id_course: 1, 
    allocation: 200, 
    date: '10/03/2012', 
    idcheval: 1 }
    ];

var ret = table.map((x) => ({ 
    allocation: x.allocation, 
    date: x.date.split('/').slice(-1)[0] 
}))
.sort((a, b) => +(b.date) - +(a.date))
.reduce((pre, cur) => {
    const len = pre.length - 1;

    if (pre[len] && pre[len].date === cur.date) {
        pre[len].allocation += cur.allocation;
        return pre;
    }
    pre[len + 1] = cur;
    return pre;
}, []);

for (const x of ret) {
  console.log(`${x.date}\t=====>\t${x.allocation}`);
  }