Как показать мои вычисления для каждого массива с машинописью и API? - PullRequest
0 голосов
/ 13 ноября 2018

Я создаю алгоритм, который суммирует разные данные.

this.http.get(url)
  .subscribe(result => {

    this.lineup = result.json();
    this.lineup = Array.of(this.lineup);

    for(let i = 0; i < this.lineup['0']['data'].latest['data'].length; i++){
       let fix = this.lineup['0']['data'].latest['data'][i];
       this.fix = this.lineup['0']['data'].latest['data'];
       this.fix.sort(function (a, b) {
                a = new Date(a.time.starting_at.date);
                b = new Date(b.time.starting_at.date);
                return a<b ? 1 : a>b ? -1 : 0;
       });
       let lined = this.fix[i].lineup['data'][i];
       this.lined = this.fix[i].lineup['data'];
       this.lined = this.lined.filter(lined => lined.player_id === 580);
       this.cards = this.lined['0'];

       if(this.cards != undefined) {
         this.note = 5;
         console.log("first",this.note);
         this.note = this.note + (0.8 * this.cards.stats.goals.scored);
         this.note = this.note - (0.4 * this.cards.stats.goals.conceded);
         this.note = this.note + (0.1 * this.cards.stats.shots.shots_total);
         this.note = this.note + (0.2 * this.cards.stats.shots.shots_on_goal);
         this.note = this.note + (0.1 * this.cards.stats.fouls.drawn);
         this.note = this.note - (0.4 * this.cards.stats.fouls.committed);
         this.note = this.note - (0.4 * this.cards.stats.cards.yellowcards);
         this.note = this.note - (3 * this.cards.stats.cards.redcards);
         this.note = this.note + (0.2 * this.cards.stats.passing.crosses_accuracy);
         this.note = this.note + (0.01 * this.cards.stats.passing.passes);
         if (this.cards.stats.passing.passes_accuracy > 80) {
            this.note = this.note + (0.5);
         } else {
            this.note = this.note - (0.5);
         }
         this.note = this.note + (0.4 * this.cards.stats.other.assists);
         this.note = this.note - (0.3 * this.cards.stats.other.offsides);
         this.note = this.note + (0.01 * this.cards.stats.passing.passes);
         this.note = this.note + (1 * this.cards.stats.other.saves);
         this.note = this.note + (2 * this.cards.stats.other.pen_saved);

         this.note = this.note - (1.5 * this.cards.stats.other.pen_missed);
         this.note = this.note - (1 * this.cards.stats.other.pen_committed);
         this.note = this.note + (0.3 * this.cards.stats.other.hit_woodwork);

         this.note = this.note + (0.3 * this.cards.stats.other.tackles);
         this.note = this.note + (0.3 * this.cards.stats.other.blocks);
         this.note = this.note + (0.4 * this.cards.stats.other.interceptions);
         this.note = this.note + (0.1 * this.cards.stats.other.clearances);
         console.log('note finale', this.note)
      }
   });

Проблема, с моим логом консоли, у меня есть 1 примечание для каждого массива как это:

player.ts: 260 note финал 8.400000000000002

player.ts: 260 примечаний финал 8,64

player.ts: 260 примечаний финал 7.38

player.ts: 260 note финал 8.839999999999998

player.ts: 260 note финал 7.040000000000001

player.ts: 260 примечаний финал 8,78

player.ts: 260 примечаний финал 7,84

player.ts: 260 note финал 9.700000000000001

player.ts: 260 note финал 7.760000000000001

Но в моем html-файле отображается только последняя заметка:

<ion-col *ngFor="let event of fix" col-6 style=" font-size: 19px;padding:  3px;vertical-align:middle;color:#4B4B4B;text-align: left; padding-left:5%;">
               {{event.localTeam.data.name}} - {{note}}

             </ion-col>

Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 13 ноября 2018

Во-первых, ваш код очень грязный, у вас есть let fix = ...['data'][i], затем строка после того, как у вас есть this.fix = ...['data'], а затем никогда не используйте переменную fix.То же самое с вашей lined переменной.Кроме того, вы устанавливаете каждый this.fix на 0-й элемент вашего json, что, я думаю, неправильно.Вы хотите использовать локальные переменные fix и lined или использовать массивы this.fix и this.lined, потому что они являются двумя отдельными переменными.Тогда у вас есть переменная this.note, которая представляет собой одну переменную, а не массив, поэтому вы получаете одну заметку в HTML.

Ваша большая проблема в том, что у вас есть переменные типа this.fix и this.note, которые не являются массивами, они представляют собой один объект.Затем, когда вы используете *ngFor, вы зацикливаете один объект, который будет заполнен с момента последнего запуска цикла for в вашей машинописи.На вашем месте я бы попробовал что-то вроде этого:

ts

lined: Array<any> = [];
fix: Array<any> = [];
cards: Array<any> = [];
note: Array<any> = [];

this.http.get(url).subscribe(result => {
this.lineup = result.json();
this.lineup = Array.of(this.lineup);

for(let i = 0; i < this.lineup['0']['data'].latest['data'].length; i++) {
   this.fix[i] = this.lineup['i']['data'].latest['data'];
   this.fix[i].sort(function (a, b) {
            a = new Date(a.time.starting_at.date);
            b = new Date(b.time.starting_at.date);
            return a<b ? 1 : a>b ? -1 : 0;
   });

   this.lined[i] = this.fix[i].lineup['data'];
   this.lined[i] = this.lined[i].filter(lined => lined.player_id === 580);
   this.cards = this.lined[i]['0'];

   if(this.cards != undefined) {
     this.note[i] = 5;
     console.log("first",this.note);
     this.note[i] = this.note[i] + (0.8 * this.cards.stats.goals.scored);
     this.note[i] = this.note[i] - (0.4 * this.cards.stats.goals.conceded);
     this.note[i] = this.note[i] + (0.1 * this.cards.stats.shots.shots_total);
     this.note[i] = this.note[i] + (0.2 * this.cards.stats.shots.shots_on_goal);
     this.note[i] = this.note[i] + (0.1 * this.cards.stats.fouls.drawn);
     this.note[i] = this.note[i] - (0.4 * this.cards.stats.fouls.committed);
     this.note[i] = this.note[i] - (0.4 * this.cards.stats.cards.yellowcards);
     this.note[i] = this.note[i] - (3 * this.cards.stats.cards.redcards);
     this.note[i] = this.note[i] + (0.2 * this.cards.stats.passing.crosses_accuracy);
     this.note[i] = this.note[i] + (0.01 * this.cards.stats.passing.passes);
     if (this.cards.stats.passing.passes_accuracy > 80) {
        this.note[i] = this.note[i] + (0.5);
     } else {
        this.note[i] = this.note[i] - (0.5);
     }
     this.note[i] = this.note[i] + (0.4 * this.cards.stats.other.assists);
     this.note[i] = this.note[i] - (0.3 * this.cards.stats.other.offsides);
     this.note[i] = this.note[i] + (0.01 * this.cards.stats.passing.passes);
     this.note[i] = this.note[i] + (1 * this.cards.stats.other.saves);
     this.note[i] = this.note[i] + (2 * this.cards.stats.other.pen_saved);

     this.note[i] = this.note[i] - (1.5 * this.cards.stats.other.pen_missed);
     this.note[i] = this.note[i] - (1 * this.cards.stats.other.pen_committed);
     this.note[i] = this.note[i] + (0.3 * this.cards.stats.other.hit_woodwork);

     this.note[i] = this.note[i] + (0.3 * this.cards.stats.other.tackles);
     this.note[i] = this.note[i] + (0.3 * this.cards.stats.other.blocks);
     this.note[i] = this.note[i] + (0.4 * this.cards.stats.other.interceptions);
     this.note[i] = this.note[i] + (0.1 * this.cards.stats.other.clearances);
     console.log('note finale', this.note)
}
});

html

<ion-col *ngFor="let event of fix; let i = index" col-6 style=" font-size: 19px;padding:  3px;vertical-align:middle;color:#4B4B4B;text-align: left; padding-left:5%;">
  {{event.localTeam.data.name}} - {{note[i]}}
</ion-col>

Если это не сработает, очистите ваш код, избавьтесь от лишних переменных, попробуйте выполнить простой *ngFor, а затем соберите все переменные и спросите снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...