我基本上是在计算一个数组中的对象具有等于某个值的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++;
}
}
}
答案 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);
});
}