在if / else语句中获取'无法读取未定义的属性'count'的定义'(Javascript)

问题描述 投票:0回答:1

i有一个数组约会对象,每个对象都有此键:"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,
},

[我想做的是通过.reduce()函数遍历appointments,如果当前元素具有"RecurrenceRule": "FREQ=DAILY;INTERVAL=1;COUNT=5;",我想取'COUNT ='之后的值并将其分配给count,如果RecurrenceRulenull,如果可以的话,我想将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.有关吗?

如果您需要更多信息,请告诉我。

javascript arrays properties this undefined
1个回答
0
投票

当使用let声明变量时,其作用域为块。在您的情况下,countif(…) {…} else {…}之外不存在

你应该哭]

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

const count = res[value.RecurrenceRule] ? parseInt(value.RecurrenceRule.split("COUNT=")[1]) : 1;
© www.soinside.com 2019 - 2024. All rights reserved.