1

在我的 TS 类中,我有一个方法应该遍历对象数组,该对象数组作为参数接收。出于某种原因,当我尝试使用 迭代它时forEach,我突然收到一条forEach is not a function错误消息。

places.forEach(place => {
  this.addMarker(place.id(), place.coords(), ...);
});

所以我尝试使用for...of迭代器:

for (const place of places) {
  this.addMarker(place.id(), place.coords(), ...);
};

我收到了places is not iterable错误消息。

所以我尝试了好的旧for循环:

for (var i = 0; i < places.length; i++) {
  this.addMarker(places[i].id(), places[i].coords(), ...);
};

它工作得很好。

虽然它可以工作,但所有这些看起来都不是很好,places[i]我不确定for在 TS 文件中使用循环是否是一个好主意,并且所有现代迭代器都可用。

所以问题是:为什么不 forEach 和 for...of 工作?有可能让它们工作吗?也许还有其他选择,或者我什至不应该为此烦恼?

编辑

解释什么places是:

过滤器类:

export class FilterUtility {
  private placesList = ko.observableArray([]);
  private placesFilter = ko.observable('');
  private storage = new StorageManager();

  setFilter = (category?: any) => {
    if (category == null) {
      this.placesFilter('');
    } else if(category == 'favorites') {
      this.placesFilter(category)
    }
    else {
      this.placesFilter(category.id());
    }
  };

  filteredPlaces = ko.computed(() => {
    let self = this;
    if(!self.placesFilter() || self.placesFilter() == null || self.placesFilter() == '') {
      return this.placesList();
    } else if(self.placesFilter() == 'favorites') {
      return ko.utils.arrayFilter(self.placesList(), function(place: Place){
        return self.storage.isPlaceInFavorites(place.id());
      });
    } else {
      return ko.utils.arrayFilter(this.placesList(), function(place: Place){
        return place.categoryId() == self.placesFilter();
      });
    }
  });

  getFilteredPlaces = () => {
    return this.filteredPlaces;
  };

  addPlace = (place) => {
    this.placesList.push(place);
  }

主要.ts:

$.when(db.getPlacesDataFromMongoLab()).done(placesData => {
    placesData[0].forEach(place => {
        filter.addPlace(new Place(place));
    })
});

this.manageMap = (data) => {
  if (isFirstRun && data == "favorites"){
    isFirstRun = false;
  } else {
    filter.setFilter(data);
    map.renderMarkers(filter.getFilteredPlaces(), self.categoriesList) 
  }
};

manageMap 方法被绑定到点击带有 Knockout 的链接。

地图类:

renderMarkers = function(places, categories) {...}
4

1 回答 1

-2

试试这种方式:

if ( typeof places !== "undefined" && places!== null) { 
{
    places.forEach(function(place) {
        console.log(place); //<- Or whatever            
    });
}
于 2018-10-25T19:07:48.120 回答