Есть ли простой способ написать этот блок кода:
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;
}
Я хотел бы заменить двойной для итерации некоторым лямбда-выражением





Вы хотите использовать метод 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;
}
Попробуй это:
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));
});
Если вам не нужен оператор 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 для повышения производительности, вы не можете использовать стрелочные функции. Вместо этого используйте некоторые() или все() функции:
markers = this.markersDisplay
.filter(marker => (this.selectedMarkersType
.some(markerType => markerType === marker.MarkerType)));
Вы видите, как это происходит в этом stackblitz