我正在努力解决问题。
我从get请求收到一个对象数组。由于业务逻辑约束,我无法修改填充数组的控制器功能。因此,我必须消除应用程序中的重复项。
所以这是代码:
C:\Users\Dan\AppData\Local\Google\Chrome\User Data\Default\Current Session
我的对象:DistributionZoneResult由4个属性组成。
this.httpClient.get(environment.apiUrl + this.config.getSettings()['cleard']['api']['user']['distribution-zone'], { headers: new HttpHeaders({ 'Authorization': 'BEARER ' + this.auth.getUserSession().access_token })}).subscribe( (arrayDistributionZoneResult: Array<DistributionZoneResult>) => {
console.log('distribution zone result : ' + arrayDistributionZoneResult.length);
let filteredArray: Array<DistributionZoneResult>;
for (const obj of arrayDistributionZoneResult) {
// here i want to add only object whose property distributionZoneId doesn't exist already in my this.distributionZone new array.
this.distributionZone.push(obj.distributionZoneId);
}
我需要消除“ distributionZoneId”重复项。
由于我是Angle 6和rxjs的新手,所以我一直在互联网上寻找解决方案,但是没有一个解决我的问题。
我尝试过的第一个解决方案:
export interface DistributionZoneResult {
distributionZoneName: string;
localisedDistributionZoneName: string;
distributionZoneId: number;
businessUnitId: number;
}
这对我的数组没有任何改变。
我尝试过的第二个解决方案:
this.distributionZone = this.distributionZone.filter((el, i, a) => i === a.indexOf(el));
我不能使用它,因为我在distinct()函数上收到一个错误:
错误TS2339:可观察类型上不存在属性'distinct'
所以我有点迷失了,因为当重复的项目具有特定的相似性时,删除重复的项目并不难。 在C#中,我将执行.dinstinct()。
感谢您的专业知识。 我的问候。
这是解决方法:
merge(arrayDistributionZoneResult).distinct((x) => x.distributionZone).subscribe(y => {
filteredArray.push(y);
console.log(filteredArray);
});
要使用委托,并将过滤器应用于数字数组。 谢谢大家。
答案 0 :(得分:0)
Rxjs方式
from(arrayDistributionZoneResult)
.pipe(
distinct(v=>v.distributionZoneId)
)
...