получение 'Cannot read свойства' count 'undefined' в операторе if / else (Javascript) - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть объекты назначения массива, каждый из которых имеет этот ключ: "RecurrenceRule". Либо он пустой (null), либо имеет что-то из следующего: "RecurrenceRule": "FREQ=DAILY;INTERVAL=1;COUNT=5;"

Вот как выглядит один элемент:

{ appointmentId: 001239,
    subject: "Something",
    Client: "Bob",
    StartTime: "2020-04-16T11:00:00.000Z",
    EndTime: "2020-04-16T11:30:00.000Z",
    km: 90,
    RecurrenceRule: null,
},

Что я хочу сделать, это выполнить итерацию через appointments с помощью функции .reduce (), и если текущий элемент имеет "RecurrenceRule": "FREQ=DAILY;INTERVAL=1;COUNT=5;", я хочу взять значение после 'COUNT =' и присвоить его count, а если RecurrenceRule равно null, я хотите присвоить 1 count, если это имеет смысл. Ниже приведен метод:

 export class AppointmentComponent implements OnInit {
appointments;


ngOnInit(){
this.getAppointments();
}


  getAppointments(){
this.appointmentService.getAppointments().subscribe((data : any) => {
  this.appointments= data.appointment;
  this.groupByClient();

});
 };

  groupByClient(){
  var result = [];

  this.appointments.reduce(function (res, value) {
    let diff = dayjs(value.EndTime).diff(dayjs(value.StartTime), "hour",true) % 60;
    if(res[value.RecurrenceRule] !== null) {
      let count =  parseInt(value.RecurrenceRule.split("COUNT=")[1])
    } else {
      let count =  1;
    }
    if (!res[value.Client]) {

      res[value.Client] = {
        km: value.km,
        Client: value.Client,
        count: this.count,
        difference: diff * this.count     
      };
      result.push(res[value.Client]);

    } else {
      res[value.Client].km += value.km;
      res[value.Client].difference += diff;
    }

    return res;
  }, {});
}
}

Однако, когда я запускаю это, я получаю сообщение об ошибке: ERROR TypeError: Cannot read property 'count' of undefined, указывающее на строки this.count. Что здесь не так? Это связано с вложенным this.?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 22 апреля 2020

Когда вы объявляете переменную с let, она попадает в блок. В вашем случае count не существует за пределами if(…) {…} else {…}

Вы должны wirte

let count;
if(value.RecurrenceRule !== null) {
      count =  parseInt(value.RecurrenceRule.split("COUNT=")[1])
    } else {
      count =  1;
    }

или

const count = value.RecurrenceRule ? parseInt(value.RecurrenceRule.split("COUNT=")[1]) : 1;

позже, в вашем коде используйте count вместо this.count

...