在我的 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) {...}