是否有一些简单的方法可以编写以下代码块:
this.markersDisplay = this.markersSource;
// Filter Marker Type
if (this.isValid(this.selectedMarkersType)) {
let markers: Array<Marker> = new Array<Marker>();
for (let marker of this.markersDisplay) {
for (let markerType of this.selectedMarkersType) {
if (marker.MarkerType == markerType) {
markers.push(marker);
break;
}
}
}
this.markersDisplay = markers;
}
我想用一些lambda表达式替换 double迭代
答案 0 :(得分:1)
尝试一下:
markers = markersDisplay.filter(x=>{
return selectedMarkersType.find((curVal,i)=>{
return x.MarkerType==curVal;
})
});
答案 1 :(得分:1)
我对您的数据结构做了一些假设,但是我希望下面的代码对您有用。
this.markersDisplay.forEach((p) => {
p.MarkerType.filter(p => p.MarkerType === this.selectedMarkersType).map(p => markers.push(marker));
});
答案 2 :(得分:1)
如果您不需要break
语句,则可以使用此
markers = this.markersDisplay
.filter((marker: Marker) => (this.selectedMarkersType
.find((markerType: MarkerType) => markerType === marker.MarkerType)));
如果您不使用类型:
markers = this.markersDisplay
.filter(marker => (this.selectedMarkersType
.find(markerType => markerType === marker.MarkerType)));
如果您需要使用break
语句来提高性能,则不能使用箭头功能。而是使用some() or every() functions:
markers = this.markersDisplay
.filter(marker => (this.selectedMarkersType
.some(markerType => markerType === marker.MarkerType)));
您可以看到这种情况in this stackblitz
答案 3 :(得分:0)
您要使用Array.forEach
方法。
this.markersDisplay = this.markersSource;
// Filter Marker Type
if (this.isValid(this.selectedMarkersType)) {
let markers: Array<Marker> = new Array<Marker>();
this.markersDisplay.forEach(md => {
this.selectedMarkersType.forEach(mt => {
if (md.MarkerType === mt) {
markers.push(md);
}
});
});
this.markersDisplay = markers;
}