有没有一些简单的方法来编写这个代码块:
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 表达式替换迭代的双精度
如果你不需要 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() 或 every() 函数:
markers = this.markersDisplay
.filter(marker => (this.selectedMarkersType
.some(markerType => markerType === marker.MarkerType)));
你可以看到这种情况发生在这个堆栈闪电战中
试试这个:
markers = markersDisplay.filter(x=>{
return selectedMarkersType.find((curVal,i)=>{
return x.MarkerType==curVal;
})
});
我对您的数据结构做了一些假设,但我希望下面的代码对您有用。
this.markersDisplay.forEach((p) => {
p.MarkerType.filter(p => p.MarkerType === this.selectedMarkersType).map(p => markers.push(marker));
});
你想要使用 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;
}