在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]
看起来都不太好,我不确定在TS文件中使用for
循环以及所有现代迭代器是一个好主意可用。
所以问题是:为什么没有每次都进行工作?有可能使它们工作吗?也许还有其他选择,或者我什至不应该为此而烦恼?
编辑
说明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);
}
Main.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) {...}
答案 0 :(得分:-1)
尝试一下:
if ( typeof places !== "undefined" && places!== null) {
{
places.forEach(function(place) {
console.log(place); //<- Or whatever
});
}