我尝试使用一个扩展方法来比较列表,该方法调用比较器,如下所示:
type HasDiff<T> = (object: T, row: any) => boolean;
export const isListEqualToRows = <T>(objects: T[], rows: any[], hasDiffFunction: HasDiff<T>): boolean => {
if (objects.length !== rows.length)
return true;
return rows.every((row, index) => {
const object = objects[index];
if (row.isNew) {
return false;
}
return !hasDiffFunction(object, row);
});
};
比较是由Angular的值以反应形式更改触发的,不确定是否相关,但以下是:
import { isListEqualToRows } from '@core/helpers';
formGroup.valueChanges.pipe(debounceTime(debounceValue)).subscribe((changes) => {
this.areChangesDetected = !isListEqualToRows<Person>(this.items, changes, this.hasDiff);
});
我的问题是,对于一个对象,我在一个列表中有一个列表。所以我想打电话给
isListEqualToRows()
方法再次在内部:
hasDiff(item: Person, row: any): boolean {
return item.description !== row.description
|| !isListEqualToRows<Address>(item.addresses, row.addresses, this.hasDiffAddress);
}
hasDiffAddress(item: Address, row: any): boolean {
return item.AddressId !== row.id
|| item.AddressStreet !== row.street;
}
但我最后在运行第二行时出现了这个错误
hasDiff()
方法:
无法读取未定义的属性(读取'hasDiffAddress')
如何解决这个问题?