【发布时间】:2018-11-26 13:42:20
【问题描述】:
我的 facilityListArray 如下所示,里面有 ClinicServices 数组,我想只过滤来自这个 ClinicServices 的唯一元素(获取唯一的 parentName 对象)数组列表。下面是facilityListArray 的屏幕截图。在附图中,我显示了第一个数组列表的扩展列表,其中包含诊所服务列表。同样,在第二个列表中,我有一个 ClinicServices 列表,其中包含第一个列表的重复项。所以我只想从整个数组列表中获取唯一的 clincServices。
下面是我的管道文件:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'removeduplicate'
})
export class RemoveduplicatePipe implements PipeTransform {
transform(value: any, args?: any): any {
// Remove the duplicate elements
const art = value.map( x => {
return x.clinicServices.map(y => {
return y.value;
});
}).reduce((acc, ele, i) => {
acc = acc.concat(ele);
return acc;
});
return new Set(art);
}
}
使用管道的 HTML 代码:
<div class="col-sm-12 required" *ngFor="let facilitySearchResult of facilityListArray | removeduplicate">
<label class="container">
<input type="checkbox">{{facilitySearchResult}}
<span class="checkmark"></span>
</label>
</div>
没有管道的HTML代码:
如果我在没有管道的情况下使用下面的代码,如果 ClinicService 正确但有重复的元素,我会得到列表。所以我实现了上面的管道代码并在我的 HTML 中使用了它,但它不起作用。我得到上面代码的空列表。非常感谢任何帮助。
<div class="col-sm-12 required" *ngFor="let facilitySearchResult of facilityListArray; let i=index">
<div class="col-sm-12 required" *ngFor="let facilityServiceResult of facilitySearchResult.clinicServices; let j=index">
<label class="container">
<input type="checkbox">{{facilityServiceResult.parentName}}
<span class="checkmark"></span>
</label>
</div>
</div>
【问题讨论】:
-
我无法弄清楚到底出了什么问题
-
@j4rey89 你能帮我解决这个问题吗
-
这似乎太复杂了。你试过lodash.com/docs/4.17.10#uniq 或lodash.com/docs/4.17.10#uniqBy 吗?
-
我不知道怎么用这个
-
在您的管道中,改为使用
return _.uniqBy(value, x=>x.y)。
标签: angular filter pipe unique