如何删除对象数组中的重复项

时间:2018-12-20 16:21:16

标签: arrays duplicates angular6

我正在努力解决问题。

我从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);
        });

要使用委托,并将过滤器应用于数字数组。 谢谢大家。

1 个答案:

答案 0 :(得分:0)

Rxjs方式

from(arrayDistributionZoneResult)
.pipe(
  distinct(v=>v.distributionZoneId)
)
...