尝试递增数字变量时,出现角“此未定义”,不确定我在做什么错

时间:2018-08-13 16:47:05

标签: javascript arrays angular typescript

我基本上是在计算一个数组中的对象具有等于某个值的2个键的次数。我想在每次满足条件时增加该数字。

如果我在console.log中查看“ for”循环触发的次数,则一切正常,并且一切正常。但是,当我尝试使用this.multidropAccept进行操作时,即使我只是想在控制台上读取它,也会突然收到未定义的错误。

代码:

function countAccepted(arr) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].DeliveryStatus == "Accepted" && arr[i].BookingId == "0") {
      console.log("poop");
      this.multidropAccepted++;
    }
  }
}

2 个答案:

答案 0 :(得分:1)

如果您将Angular与Typescript一起使用,则不要使用function关键字来编写方法。由于它将创建自己的范围,因此您将无法使用其中的this访问类级别的属性。将您的方法代码更新为:

countAccepted(arr) {
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].DeliveryStatus == "Accepted" && arr[i].BookingId == "0") {
      console.log("poop");
      this.multidropAccepted++;
    }
  }
}

答案 1 :(得分:1)

我最终这样写:

let countAccepted = data => {
        for (let i = 0; i < data.length; i++) {
          if (
            data[i].DeliveryStatus == "Accepted" &&
            data[i].BookingId == "0"
          ) {
            this.multidropAccepted++;
          }
        }
      };

必须在预订块中拥有它,才能使其工作并在调用它之前进行定义。 我在最后调用它,以确保我的表具有优先级,然后才计算这些内容

countAccepted(data)

这是整体外观:

constructor(
    private adalService: AdalService,
    private service: DeliveriesService,
    private ngRedux: NgRedux<IAppState>
  ) {
    this.service.getSectionAll();
    this.sectionAllSubscription = this.sectionAll.subscribe(data => {
      let countAccepted = data => {
        for (let i = 0; i < data.length; i++) {
          if (
            data[i].DeliveryStatus == "Accepted" &&
            data[i].BookingId == "0"
          ) {
            this.multidropAccepted++;
          }
        }
      };

      let countDelivered = data => {
        for (let i = 0; i < data.length; i++) {
          if (
            data[i].DeliveryStatus == "Delivered" &&
            data[i].BookingId == "0"
          ) {
            this.multidropDelivered++;
          }
        }
      };

      (this.dataSource = new MatTableDataSource(
        data.filter(
          (value, index, array) =>
            !array.filter(
              (v, i) => JSON.stringify(value) == JSON.stringify(v) && i < index
            ).length
        )
      )),
        (this.dataSource.sort = this.sort),
        (this.dataSource.paginator = this.paginator),
        countAccepted(data);
      countDelivered(data);
    });
  }