Чтобы просто удалить дубликаты на основе какого-либо свойства один раз в начале
const newList: BenefitSettingModel[] = [];
this.benefits.forEach((benefit: BenefitSettingModel) => {
if (!newList.some(x => x.benefitGroupName === benefit.benefitGroupName)) {
newList.push(benefit);
}
});
, после этого вы можете использовать этот новый список для визуализации html элементов.
Обновить
Обычно вам не нужно сильно изменять, прежде чем передать его Angular, вы фильтруете его на дубликаты:
ngOnInit() {
this.productBenefitSettingForm = this.fb.group({
benefitSettings: this.fb.array([])
});
this.dataService.getBenefits()
.subscribe((receivedBenefits: BenefitSettingModel[]) => {
// dump received benefits (possibly with duplicates)
console.log(JSON.stringify(receivedBenefits, null, 2));
// filter out duplicates
const newList: BenefitSettingModel[] = [];
receivedBenefits.forEach((benefit: BenefitSettingModel) => {
if (!newList.some(x => x.benefitGroupName === benefit.benefitGroupName)) {
newList.push(benefit);
}
});
// get reference to the form array
const fa = this.productBenefitSettingForm.controls["benefitSettings"] as FormArray;
// fill the form with the list (without any duplicates)
newList.forEach((b: BenefitSettingModel) => {
fa.push(this.addBenefitSetting(b.benefitSettingId, b.benefitGroupId));
});
});
}
в html:
<form [formGroup]="productBenefitSettingForm">
<div formArrayName="benefitSettings">
<div *ngFor="let optionGroup of productBenefitSettingForm.controls['benefitSettings'].controls; let i=index">
<div [formGroupName]="i">
<input type="text" formControlName="benefitSettingId">
<input type="text" formControlName="benefitGroupId">
</div>
</div>
</div>
</form>
Проверьте это работает Stackblitz .