角度将双重迭代替换为 lambda 表达式



有没有一些简单的方法来编写这个代码块:

  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;
}

最新更新